首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >执行顺序或ExecuteScalar问题

执行顺序或ExecuteScalar问题
EN

Stack Overflow用户
提问于 2011-12-03 12:51:55
回答 3查看 520关注 0票数 0

首先,im将一个新成员插入到members表中。然后,我查询表以获取成员id。我将数据放入表中,但它出现的速度不够快,无法在以下几行中执行查询。

我得到这样的异常:"ExecuteScalar需要一个打开的和可用的连接。该连接的当前状态是关闭的。“我不知道这里出了什么问题。

代码语言:javascript
运行
复制
 //This code works fine
 //Insert new members data
 InsertMembers insert = new InsertMembers();
 int age = Int32.Parse(txtAge.Text);
 insert.InsertNewMember(txtEmail.Text, Myguid, txtName.Text, txtCity.Text, txtState.Text, txtDescription.Text, age, gender);

 //This is the block thats failing
 //Get Member Id to Insert into Pictures table
 GetMemberInfo GetID = new GetMemberInfo();
 int UMemberId = GetID.GetMemberId(Myguid);
 Displayme.Text = UMemberId.ToString();



 public int GetMemberID(string guid)
   {
       string strConectionString = ConfigurationManager.AppSettings["DataBaseConnection"];
       string StrSql = "SELECT MemberID FROM MEMBERS WHERE (Guid = @GuidID)";

       int memberId;
       using (var connection = new SqlConnection(strConectionString))
       using (var command = new SqlCommand(StrSql, connection))
       {
           command.Parameters.Add("@GuidID", SqlDbType.VarChar).Value = guid; 
           memberId = (int)command.ExecuteScalar();
       }
       //returns 0 when it should be member id number
       return memberId; 

   }
EN

回答 3

Stack Overflow用户

发布于 2011-12-03 12:57:35

在执行命令之前,您应该调用connection.Open()

代码语言:javascript
运行
复制
public int GetMemberID(string guid)
{
    string strConectionString = ConfigurationManager.AppSettings["DataBaseConnection"];
    string StrSql = "SELECT MemberID FROM MEMBERS WHERE (Guid = @GuidID)";

    int memberId;
    using (var connection = new SqlConnection(strConectionString))
    {
        connection.Open();
        using (var command = new SqlCommand(StrSql, connection))
        {
            command.Parameters.Add("@GuidID", SqlDbType.VarChar).Value = guid; 
            memberId = (int)command.ExecuteScalar();
        }
    }

    //returns 0 when it should be member id number
    return memberId; 
}
票数 1
EN

Stack Overflow用户

发布于 2011-12-03 12:54:01

仔细阅读错误消息。这与ExecuteScalar太快无关,也与操作顺序无关,除非有特定的操作缺失。您尚未打开连接。

ExecuteScalar调用之前,在using块的作用域中加入一个connection.Open();,您应该会体验到一个不同的结果。

票数 0
EN

Stack Overflow用户

发布于 2011-12-03 13:07:39

替换您的这些代码行

代码语言:javascript
运行
复制
  using (var connection = new SqlConnection(strConectionString))
       using (var command = new SqlCommand(StrSql, connection))
       {
           command.Parameters.Add("@GuidID", SqlDbType.VarChar).Value = guid; 
           memberId = (int)command.ExecuteScalar();
       }

有了这些

代码语言:javascript
运行
复制
   using (SqlConnection connection = new SqlConnection(
               strConectionString))
    {
        SqlCommand command = new SqlCommand(StrSql, connection);
         command.Parameters.Add("@GuidID", SqlDbType.VarChar).Value = guid;
        command.Connection.Open();
        memberId = (int)command.ExecuteScalar();
    }

using语句用于自动处理连接,当您已经在SqlConnection上应用了with sql命令时,我认为这里不需要应用该命令。并且您错过了在执行命令之前打开连接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8365606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档