【问题标题】:CommandText property has not been initialized error in gridview网格视图中的 CommandText 属性尚未初始化错误
【发布时间】:2015-05-27 20:44:00
【问题描述】:

我有一个gridview,我想在插入中检查行,但我看到了这个错误:

CommandText 属性尚未初始化。

我猜我关于 strArrays 的错误。我正在为此工作两天

我该如何解决?

StringBuilder stringBuilder = new StringBuilder(string.Empty);
SqlConnection sqlConnection = new  SqlConnection(ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString.ToString());
SqlCommand sqlCommand = new SqlCommand();
for (int i = 0; i < GridView1.Rows.Count; i++)
{
   int type = 2;
   CheckBox chkUpdate = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("chkSelect");

   TextBox txtAmount = (TextBox)GridView1.Rows[i].Cells[5].FindControl("txtAmount");

   if (chkUpdate != null)
   {
      if (chkUpdate.Checked)
      {
         string strID = GridView1.Rows[i].Cells[1].Text;
         GridView1.Rows[i].FindControl("txtLocation")).Text;
         string text = this.GridView1.Rows[i].Cells[1].Text;
         string[] strArrays = new string[] { "INSERT INTO [OrderCancel]
                                             ([OrderID], 
                                              [Message], 
                                              [Type],
                                              [RelationProductID],
                                              [Amount]) 
                                              VALUES(" , 
                                              Request.QueryString["o"] ,
                                              ",'" , txtWhy.Text , 
                                              "',",type.ToString(),",
                                              " , strID , "," , 
                                              txtAmount.Text , ");" };
         stringBuilder.Append(string.Concat(strArrays));

         //append update statement in stringBuilder 
         stringBuilder.Append(string.Concat(strArrays));
      }
   }
   try
   {
      try
      {
         sqlCommand.CommandType = CommandType.Text;
         sqlCommand.CommandText = stringBuilder.ToString();
         sqlCommand.Connection = sqlConnection;
         sqlConnection.Open();
         sqlCommand.ExecuteNonQuery();
      }
      catch (SqlException sqlException)
      {
         throw new Exception(string.Concat("Error in Updation",
                                            sqlException.Message));
      }
   }
   finally
   {
      sqlConnection.Close();
   }     

【问题讨论】:

  • using代替finally,去掉你没用的catch块。
  • 你有一个 SQL 注入漏洞。
  • 我该如何解决?@SLaks
  • 鉴于错误信息,我赌chkUpdate == null。为什么不开始使用调试器?这可以在不到 10 秒的时间内解决
  • SqlCommand sqlCommand = new SqlCommand(); 那是空的。

标签: c# ado.net sqlcommand


【解决方案1】:

您的代码可以被清理,您可以执行以下操作:

private readonly string dbConnection = "...";
private const string query = "... Column = @Column";

为简洁起见,我添加了 ... 这将与您的连接字符串和带有参数的查询相关联。

var message = String.Empty;
using(var connection = new SqlConnection(dbConnection))
     using(var command = new SqlCommand(query, dbConnection))
     {
          connection.Open();
          command.CommandType =  CommandType.Text;
          command.Parameters.Add("@Column", SqlDbType.NVarChar).Value = message;
          command.ExecuteNonQuery();
     }

因此,小 sn-p 将位于方法内部,该方法将传递 Grid 中的数据模型。然后,当您从 Grid 传递一个值时,您将构建模型并传递给将写入数据库的方法。

此外,当您使用StringBuilder 时,您还需要调用ToString(); 以确保在使用时它是string 而不是StringBuilder

【讨论】:

    【解决方案2】:

    如果您不设置 commandText 属性,通常会发生此错误。查看您的代码,您的 stringbuilder 变量似乎没有设置。您是否尝试在“chkUpdate.Checked”循环中放置断点?如果是,您可以发布在循环中构建的 sql

    【讨论】:

    • 我有复选框和文本框。我想插入选中的行。
    • 通常你在 cmets 中写问号,而不是在答案中
    • 我不得不这样做,因为我没有足够的声誉来添加 cmets
    • 原文来自Karthik:“为什么需要一个字符串数组来构造for循环里面的sql语句?”
    • @Karthik if (chkUpdate.Checked) 总是返回 false 为什么?
    猜你喜欢
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    相关资源
    最近更新 更多