gpt4 book ai didi

c# - SQL C#,命令(查询)执行两次

转载 作者:行者123 更新时间:2023-11-29 11:10:48 25 4
gpt4 key购买 nike

我有一个简单的应用程序来构建 sql 查询(用于教育目的)。我创建了textarea,用户可以在其中将命令写入sql,然后程序必须执行它或捕获Sqlexeption。我知道安全等问题,但没关系-用户可以删除所有内容:)

好的。这是代码:

查询 = 来自文本区域的文本(其 SQL 命令)

if (!String.IsNullOrEmpty(query) || !String.IsNullOrWhiteSpace(query))
{
string conString = ConfigurationManager.ConnectionStrings["StudentDataBase"].ConnectionString;

try
{
using (SqlConnection SqlCon = new SqlConnection(conString))
{
try
{
SqlCommand command = new SqlCommand(query, SqlCon);
SqlCon.Open();

command.ExecuteScalar();

int numOfRows = 0;

SqlDataAdapter adpt = new SqlDataAdapter(command);
DataTable dt = new DataTable();
DataSet dset = new DataSet();
adpt.Fill(dset);
dt = dset.Tables[0];
if (dt.Rows.Count > 0)
{
numOfRows = dt.Rows.Count;
gridview_results.DataSource = dt;
gridview_results.DataBind();

Sql_error = "Done. Results: " + numOfRows + " rows.";
container_sql_error.Style.Add("background-color", "#b9ffcb");
}
else
{
Sql_error = "0 rows to show.";
}

SqlCon.Close();
}
catch (SqlException ex)
{
Sql_error = "Error: " + ex.Message;
container_sql_error.Style.Add("background-color", "#ff9600");
}
}
}
catch (SqlException ex)
{
Sql_error = "Error... " + ex.Message;
container_sql_error.Style.Add("background-color", "#ff9600");
}
}

现在,当我尝试时:

SELECT * FROM test没关系。显示数据的 GridView。

slleeeccct * from testsste正常 - 显示错误。

INSERT INTO test (col1) VALUES ('aaa')它不正常 - 程序抛出错误 System.IndexOutOfRangeException: cannot find table 0但是命令正确执行了两次。

现在我有一个问题:为什么命令执行两次(数据库中的 2x 相同数据)以及为什么出现关于 finding table 0 的错误(是不是关于 GridView 可能无法用 insert into 填充 GV )?

最佳答案

首先,您执行代码两次

-> 一次使用 ExecuteScalar,另一次使用 SQLAdapter 用返回的结果填充数据集,您可以像下面这样使用它:

1- dataset ds=new dataset();

2- adapter.fill(ds);

3- return ds;

就是这样:)

关于插入查询错误,这也是正常的,因为插入语句使用 Execute Scalar will 执行查询,并返回查询返回的结果集中第一行的第一列。附加的列或行将被忽略。

因此,当您使用 Insert 语句时,您会遇到错误,因为

1-命令未成功执行并返回错误“检查 databsae 是否具有您刚刚键入的插入行”

2-数据集表没有数据,您可以在尝试读取数据之前进行 IF 语句检查,例如

"If(ds.tables.count>0) {do something}"

关于c# - SQL C#,命令(查询)执行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40599256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com