【问题标题】:Excute scalar eror执行标量错误
【发布时间】:2016-05-24 23:39:19
【问题描述】:

C#:

  int lev;
            SqlCommand getlev = new SqlCommand("SELECT level FROM [User] WHERE Username = @username");
            getlev.Parameters.AddWithValue("@username", txtuser.Text);
            c.Open();
            lev = (int)getlev.ExecuteScalar();
            c.Close();
            lev++;
            SqlCommand lvup= new SqlCommand("UPDATE [User] SET level = @lev WHERE Username = @username", c);
            lvup.Parameters.AddWithValue("@lev",lev);
            lvup.Parameters.AddWithValue("@username", txtuser.Text);
            c.Open();
            lvup.ExecuteNonQuery();
            c.Close();

错误:

ExecuteScalar:连接属性尚未初始化。

描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。

异常详细信息:System.InvalidOperationException:ExecuteScalar: 连接属性尚未初始化。

【问题讨论】:

  • 显示c的定义
  • 错误信息一目了然。在 getlev SqlCommand 对象上设置 Connection 属性。
  • 可以像Seconde一样给firstSqlCommand添加连接参数,如果要执行de secondeSqlCommande一定不能关闭连接
  • 可以在一次行程中自动执行此操作:update [User] set lev += 1 output inserted.lev where Username = @username - 返回新的 lev。

标签: c# sql-server


【解决方案1】:

您没有提供该命令的连接。使用

getlev.Connection = c;

在执行ExecuteScalar()之前。

或者使用接受连接的构造函数重载:

SqlCommand getlev = new SqlCommand(
                            "SELECT level FROM [User] WHERE Username = @username",
                            c);

【讨论】:

    【解决方案2】:

    您需要为第一个 SqlCommand 提供连接参数:

    SqlCommand getlev = new SqlCommand("SELECT level FROM [User] WHERE Username = @username", c);
    

    您在将连接传递给第二个 SqlCommand 之前关闭了连接:

    c.Close(); // Remove this
    lev++;
    SqlCommand lvup= new SqlCommand("UPDATE [User] SET level = @lev WHERE Username = @username", c);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-06
      • 1970-01-01
      • 2016-06-13
      相关资源
      最近更新 更多