首先,im将一个新成员插入到members表中。然后,我查询表以获取成员id。我将数据放入表中,但它出现的速度不够快,无法在以下几行中执行查询。
我得到这样的异常:"ExecuteScalar需要一个打开的和可用的连接。该连接的当前状态是关闭的。“我不知道这里出了什么问题。
//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;
}发布于 2011-12-03 12:57:35
在执行命令之前,您应该调用connection.Open():
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;
}发布于 2011-12-03 12:54:01
仔细阅读错误消息。这与ExecuteScalar太快无关,也与操作顺序无关,除非有特定的操作缺失。您尚未打开连接。
在ExecuteScalar调用之前,在using块的作用域中加入一个connection.Open();,您应该会体验到一个不同的结果。
发布于 2011-12-03 13:07:39
替换您的这些代码行
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();
}有了这些
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命令时,我认为这里不需要应用该命令。并且您错过了在执行命令之前打开连接。
https://stackoverflow.com/questions/8365606
复制相似问题