【问题标题】:"executenonquery connection property has not been initialized"“executenonquery 连接属性尚未初始化”
【发布时间】:2013-03-28 23:48:14
【问题描述】:
SqlConnection cn = new SqlConnection(@"DataSource=dbedu.cs.vsb.cz\SQLDB;Persist Security Info=True;User ID=*****;Password=*******");

SqlCommand cmd = new SqlCommand();
string finish = DropDownListFi.SelectedValue;
cn.Open();
String Name = Request.QueryString["Name"];
cmd.CommandText = "UPDATE navaznost_ukolu SET finish=@finish where Name='" + Name + "'";
cmd.Parameters.Add(new SqlParameter("@finish", finish));
cmd.ExecuteNonQuery();
cmd.Clone();

错误信息

Executenonquery 连接属性尚未初始化。

【问题讨论】:

    标签: c# asp.net sql sql-server sql-update


    【解决方案1】:

    您当前代码的问题是您没有设置SqlCommand 对象的Connection 属性。试试这个,

    SqlCommand cmd = new SqlCommand();
    cmd.Connection = cn;
    

    您还必须参数化在name 上设置的值

    String Name = Request.QueryString["Name"];
    cmd.CommandText = "UPDATE navaznost_ukolu SET finish=@finish where Name=@name";
    cmd.Parameters.Add(new SqlParameter("@finish", finish));
    cmd.Parameters.Add(new SqlParameter("@name", Name));
    

    完整代码

    string finish = DropDownListFi.SelectedValue;
    String Name = Request.QueryString["Name"];
    string connStr = @"DataSource=dbedu.cs.vsb.cz\SQLDB;
                       Persist Security Info=True;
                       User ID=*****;
                       Password=*******";
    string sqlStatement = @"UPDATE navaznost_ukolu 
                            SET    finish = @finish 
                            WHERE  Name = @Name";
    
    using (SqlConnection conn = new SqlConnection(connStr))
    {
        using(SqlCommand cmd = new SqlCommand())
        {
            cmd.Connection = conn;
            cmd.CommandText = sqlStatement;
            cmd.CommandType = CommandType.Text;
    
            cmd.Parameters.Add(new SqlParameter("@finish", finish));
            cmd.Parameters.Add(new SqlParameter("@name", Name));
    
            try
            {
                conn.Open();
                cmd.ExecuteNonQuery();
            }
            catch(SqlException e)
            {
                // do something with the exception
                // do not hide it
                // e.Message.ToString()
            }
        }
    }
    

    为了正确编码

    • 使用using 语句处理propr 对象
    • 使用try-catch 块来正确处理对象

    【讨论】:

      【解决方案2】:

      错误是不言自明的,您尚未将连接分配给命令。你可以使用构造函数:

      using(var cn = new SqlConnection(@"DataSource=dbedu.cs.vsb.cz\SQLDB;Persist Security Info=True;User ID=*****;Password=*******"))
      using(var cmd = new SqlCommand(
          "UPDATE navaznost_ukolu SET finish=@finish where Name=@Name"
          , cn))
      {
         string finish = DropDownListFi.SelectedValue;
         cn.Open();
         String Name = Request.QueryString["Name"];
         cmd.Parameters.AddWithValue("@finish", finish);
         cmd.Parameters.AddWithValue("@Name", Name);
         cmd.ExecuteNonQuery();
      }
      

      请注意,我还为Nameusing 语句使用了一个sql 参数,以确保任何实现IDisposable 的东西都会被处理掉,即使出现异常也是如此。这也会关闭连接。

      【讨论】:

        猜你喜欢
        • 2012-05-03
        • 2011-07-22
        • 2012-08-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多