[英]must declare the scalar variable @
由于某种原因,在定义我的变量后,我仍然得到'必须声明标量变量'错误。
using (OleDbConnection conn = new OleDbConnection(connString))
{
conn.Open();
using(OleDbCommand cmd = new OleDbCommand("SELECT UserID FROM tblUser WHERE Username=@user AND Password = @pass", conn))
{
cmd.Parameters.AddWithValue("@user", user);
cmd.Parameters.AddWithValue("@pass", pass);
int UserID = (int)cmd.ExecuteScalar();
return UserID < 0 ? -1 : UserID;
}
}
OleDb不支持命名参数。 我认为这是造成错误的原因。 相反,在SQL查询中,使用?
而不是参数名称,并确保添加的参数顺序与它们在查询中出现的顺序相匹配。 所以:
using(OleDbCommand cmd = new OleDbCommand("SELECT UserID FROM tblUser WHERE Username=? AND Password = ?", conn))
{
cmd.Parameters.AddWithValue("@user", user);
cmd.Parameters.AddWithValue("@pass", pass);
int UserID = (int)cmd.ExecuteScalar();
return UserID < 0 ? -1 : UserID;
}
尝试使用以下内容。 如果将值传入null,则会将其解释为缺失。
using (OleDbConnection conn = new OleDbConnection(connString))
{
conn.Open();
using(OleDbCommand cmd = new OleDbCommand("SELECT UserID FROM tblUser WHERE Username=@user AND Password = @pass", conn))
{
cmd.Parameters.AddWithValue("@user", user ?? DBNull.Value);
cmd.Parameters.AddWithValue("@pass", pass ?? DBNull.Value);
int UserID = (int)cmd.ExecuteScalar();
return UserID < 0 ? -1 : UserID;
}
}
添加Clear()以删除上一次调用中遗留的所有参数。 愿这会奏效。
cmd.Parameters.Clear()
cmd.Parameters.AddWithValue("@user", user);
cmd.Parameters.AddWithValue("@pass", pass);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.