SQL C#,命令(查询)正在执行两次

时间:2016-11-14 22:56:22

标签: c# mysql asp.net gridview

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

确定。这是代码:

query =来自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但是命令正确地完成了但是两次。

现在我有一个问题:为什么命令优于TWICE(数据库中的数据是2倍)以及为什么会出现关于finding table 0的错误(是否有关于GridView可能使用insert into填充GV) ?

1 个答案:

答案 0 :(得分:1)

首先,您要执行两次代码

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