'ExecuteReader: Connection property has not been initialized.'
'ExecuteReader: Connection property has not been initialized.'
我是 C# 的新手,我一直在尝试使用 ADO.NET 和 WinForm 创建登录,但是当我尝试登录时出现此错误;
System.InvalidOperationException: 'ExecuteReader: Connection property has not been initialized.'
我好像不知道怎么回事
private void bteAdminLog_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=DESKTOP-RCPAL7F;Initial Catalog=iCubeDB;Integrated Security=True";
con.Open();
String txtUser = txtUsername.Text;
String txtPass = txtPassword.Text;
string query = "SELECT * FROM AdminLogin WHERE Username =@user AND Password = @Pass";
SqlCommand cmd = new SqlCommand();
cmd.Parameters.Add(new SqlParameter("@user", txtUser));
cmd.Parameters.Add(new SqlParameter(" @Pass", txtPass));
SqlDataReader dr = cmd.ExecuteReader();
if(dr.HasRows == true)
{
MessageBox.Show("Done");
}
else
{
MessageBox.Show("not done");
}
}
您的 SqlCommand
没有通过 query
和 conn
你应该这样做:
SqlCommand cmd = new SqlCommand(query, con);
而对于 Parameters
部分,您使用 各自的数据类型设置参数,包括 length/size(与您的数据库列匹配),然后分配每个参数的值:
cmd.Parameters.Add("@user", SqlDbType.Varchar, 10).Value = txtUser;
cmd.Parameters.Add("@Pass", SqlDbType.NVarchar, 50).Value = /* hashed txtPass */;
cmd.Parameters.Add()
中的第三个参数用于数据类型的size/length。
已更新:
[第一个编辑版本]
已与 Post 所有者确认,存储的密码已在数据库中进行哈希处理。因此我删除了之前的评论。
[第二次编辑版本]
感谢@Charlie 的关心,所以我编辑答案以包含数据类型的 length/size。
参考文献:
我是 C# 的新手,我一直在尝试使用 ADO.NET 和 WinForm 创建登录,但是当我尝试登录时出现此错误;
System.InvalidOperationException: 'ExecuteReader: Connection property has not been initialized.'
我好像不知道怎么回事
private void bteAdminLog_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=DESKTOP-RCPAL7F;Initial Catalog=iCubeDB;Integrated Security=True";
con.Open();
String txtUser = txtUsername.Text;
String txtPass = txtPassword.Text;
string query = "SELECT * FROM AdminLogin WHERE Username =@user AND Password = @Pass";
SqlCommand cmd = new SqlCommand();
cmd.Parameters.Add(new SqlParameter("@user", txtUser));
cmd.Parameters.Add(new SqlParameter(" @Pass", txtPass));
SqlDataReader dr = cmd.ExecuteReader();
if(dr.HasRows == true)
{
MessageBox.Show("Done");
}
else
{
MessageBox.Show("not done");
}
}
您的 SqlCommand
没有通过 query
和 conn
你应该这样做:
SqlCommand cmd = new SqlCommand(query, con);
而对于 Parameters
部分,您使用 各自的数据类型设置参数,包括 length/size(与您的数据库列匹配),然后分配每个参数的值:
cmd.Parameters.Add("@user", SqlDbType.Varchar, 10).Value = txtUser;
cmd.Parameters.Add("@Pass", SqlDbType.NVarchar, 50).Value = /* hashed txtPass */;
cmd.Parameters.Add()
中的第三个参数用于数据类型的size/length。
已更新:
[第一个编辑版本]
已与 Post 所有者确认,存储的密码已在数据库中进行哈希处理。因此我删除了之前的评论。
[第二次编辑版本]
感谢@Charlie 的关心,所以我编辑答案以包含数据类型的 length/size。
参考文献: