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)?

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

首先,您执行了两次代码

->一次你正在使用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}"