由于某种原因,在定义我的变量后,我仍然得到'必须声明标量变量'错误..
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;
}
}
答案 0 :(得分:13)
OleDb不支持命名参数。我认为这是造成错误的原因。相反,在SQL查询中,使用?
而不是param名称,并确保添加的参数顺序与它们在查询中出现的顺序相匹配。
这样:
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;
}
答案 1 :(得分:0)
尝试使用以下内容。如果将值传入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;
}
}
答案 2 :(得分:0)
添加Clear()以删除上次调用中遗留的所有参数。愿这可行。
cmd.Parameters.Clear()
cmd.Parameters.AddWithValue("@user", user);
cmd.Parameters.AddWithValue("@pass", pass);