[英]SQL C#, command(query) is executing twice
我有一个简单的应用程序来构建sql查询(出于教育目的)。 我创建了textarea,用户可以在其中将命令写入sql,然后程序必须执行它或捕获Sqlexeption。 我知道安全性等知识,但是可以的用户可以删除所有内容:)
好。 这是代码:
查询=来自textarea的文本(其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')
的NOT OK-程序抛出错误System.IndexOutOfRangeException: cannot find table 0
BUT命令被正确执行了两次。
现在我有一个问题:为什么命令执行TWICE(数据库中2x相同的数据),为什么finding table 0
出错(关于GridView可能无法用insert into
填充GV)?
首先,您要执行两次代码
->一次使用ExecuteScalar,另一次使用SQLAdapter用返回的结果填充数据集,则可以像下面这样使用它:
1- dataset ds=new dataset();
2- adapter.fill(ds);
3- return ds;
就是这样:)
关于插入查询错误,这也是正常的,因为使用Execute Scalar的insert语句将执行查询,并返回查询返回的结果集中第一行的第一列。 其他列或行将被忽略。
因此,当您使用Insert语句时,您会遇到错误,因为
1-命令未成功执行,并返回错误“检查databsae是否具有您刚刚键入的插入行”
2-数据集表中没有数据,您可以在尝试从中读取之前先进行IF语句检查
"If(ds.tables.count>0) {do something}"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.