先贴代码吧:
public override bool ValidateUser(string username, string password)
{
bool isValid = false;
OdbcConnection conn = new OdbcConnection(connectionString);
OdbcCommand cmd = new OdbcCommand("SELECT Password, IsApproved FROM [" + tableName + "] WHERE Username = ? AND ApplicationName = ? AND IsLockedOut = False", conn);
cmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = username;
cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = pApplicationName;
OdbcDataReader reader = null;
try
{
conn.Open();//正常 reader = cmd.ExecuteReader(CommandBehavior.SingleRow); //异常
//异常信息如下:
ERROR [07002] [Microsoft][ODBC Microsoft Access Driver] 参数不足,期待是 3。
}
}
不复杂吧,学过C#的人都会,可我就纳闷会报这个错。哪位高手指点下
public override bool ValidateUser(string username, string password)
{
bool isValid = false;
OdbcConnection conn = new OdbcConnection(connectionString);
OdbcCommand cmd = new OdbcCommand("SELECT Password, IsApproved FROM [" + tableName + "] WHERE Username = ? AND ApplicationName = ? AND IsLockedOut = False", conn);
cmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = username;
cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = pApplicationName;
OdbcDataReader reader = null;
try
{
conn.Open();//正常 reader = cmd.ExecuteReader(CommandBehavior.SingleRow); //异常
//异常信息如下:
ERROR [07002] [Microsoft][ODBC Microsoft Access Driver] 参数不足,期待是 3。
}
}
不复杂吧,学过C#的人都会,可我就纳闷会报这个错。哪位高手指点下
public override bool ValidateUser(string username, string password)
{
bool isValid = false;
OdbcConnection conn = new OdbcConnection(connectionString);
OdbcCommand cmd = new OdbcCommand("SELECT [Password], [IsApproved] FROM [" + tableName + "] WHERE [Username] = @Username AND ApplicationName = @pApplicationName AND IsLockedOut = 0", conn);
cmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = username;
cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = pApplicationName;
OdbcDataReader reader = null;
try
{
conn.Open();//正常 reader = cmd.ExecuteReader(CommandBehavior.SingleRow); //异常
}
}
应该是这个参数的问题吧?
你没给它值。
所以少一个参数
OleDbConnection conn = new OleDbConnection(""); OleDbCommand cmd = new OleDbCommand(SELECT [Password], IsApproved FROM " + tableName + " WHERE [Username] = @Username AND ApplicationName = @pApplicationName AND IsLockedOut = 0", conn);
OleDbParameter[] parames = new OleDbParameter[] { new OleDbParameter("@Username", OdbcType.VarChar),
new OleDbParameter("@applicationname", OdbcType.VarChar)};
parames[0].Value = "";
parames[1].Value = "";
cmd.Parameters.AddRange(parames);
cmd.Connection.Open();
OleDbDataReader reader = cmd.ExecuteReader();
请看这篇文章,我说得很清楚了。
它们不是按照字段名,而是按照字段顺序来的。
9楼的文章我大概看了下。没明白你的意思。
8楼的建议正在实施中。、
{
bool isValid = false;
OleDbConnection conn = new OleDbConnection(connectionString);
string sql = "select [Password],IsApproved From [" + tableName + "] where Username=@Username and ApplicationName=@applicationName";
OleDbCommand cmd = new OleDbCommand(sql, conn);
OleDbParameter parmUserName = new OleDbParameter("@Username", OleDbType.VarChar, 255);
parmUserName.Value = username;
cmd.Parameters.Add(parmUserName); OleDbParameter parmApplicationName = new OleDbParameter("@ApplicationName", OleDbType.VarChar, 255);
parmApplicationName.Value = pApplicationName;
cmd.Parameters.Add(parmApplicationName);
OleDbDataReader reader = null;
bool isApproved = false;
string pwd = ""; try
{
conn.Open(); reader = cmd.ExecuteReader(CommandBehavior.SingleRow);
//至少有一个参数没有被指定值。
//我在即时窗口打出来的信息
//cmd.CommandText
"select [Password],IsApproved From [Users] where Username=@Username and ApplicationName=@applicationName"
//cmd.Parameters.Count
//2
//cmd.Parameters[0].Value
//"q"
//cmd.Parameters[1].Value
//"/WebUI"
if (reader.HasRows)
{
reader.Read();
pwd = reader.GetString(0);
isApproved = reader.GetBoolean(1);
}
else
{
return false;
} reader.Close();
catch()
{
}
return isValid;
}
我要疯了,高手救命