SQL c#,命令(查询)执行两次
本文关键字:执行 两次 查询 命令 SQL | 更新日期: 2023-09-27 18:18:06
我有一个简单的应用程序来构建sql查询(用于教育目的)。我创建了textarea,用户可以将他的命令写入sql,然后程序必须执行它或捕获sqlexexception。我知道安全等问题,但没关系,用户可以删除所有内容:)
ok。下面是代码:
query = text from 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
OK。GridView显示数据
slleeeccct * from testsste
its OK -显示错误。
INSERT INTO test (col1) VALUES ('aaa')
its NOT OK-程序抛出错误System.IndexOutOfRangeException: cannot find table 0
BUT命令被正确执行但两次。
现在我有一个问题:为什么命令执行两次(数据库中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语句时,你会有一个错误,因为
1-命令没有成功执行,并返回一个错误"检查databsae是否有您刚刚键入的插入行"
2-数据集表没有数据,你可以做一个IF语句检查之前,你试图读取它,如
"If(ds.tables.count>0) {do something}"