OleDbReader始终显示此错误

时间:2014-02-16 12:27:12

标签: asp.net sql

我有这套命令。

using (conn)
{
    conn.Open();

    OleDbCommand cmd = new OleDbCommand("SELECT ID FROM User WHERE UserPassword= '@oldpassword'", conn);
    cmd.Parameters.AddWithValue("@oldpassword", currentPassword);
    OleDbDataReader reader = cmd.ExecuteReader();
    reader.Read();
    int userID = reader.GetInt32(0);
}

我的SQL语句是否正确?

2 个答案:

答案 0 :(得分:0)

  

OLE DB .NET提供程序不支持将参数传递给SQL语句的命名参数

因此,您需要从查询中删除单引号,并使用?代替命名参数。

OleDbCommand cmd = new OleDbCommand("SELECT ID FROM [User] WHERE UserPassword= ?", conn);
cmd.Parameters.Add(currentPassword);

OleDbDataReader reader = cmd.ExecuteReader();

if (reader.HasRows)
{
    int userID = reader.GetInt32(0);
}

答案 1 :(得分:0)

如果不知道你得到的确切错误,我相信这是正确的代码:

using (conn)
{
    conn.Open();

    OleDbCommand cmd = new OleDbCommand("SELECT ID FROM [User] WHERE UserPassword = ?", conn);
    cmd.Parameters.AddWithValue("@oldpassword", currentPassword);
    OleDbDataReader reader = cmd.ExecuteReader();
    if (reader.Read())
    {
        IdLabel.Text = reader.GetInt32(0).ToString();
    }
}

在方括号之间指定表格,因为User是保留字并使用问号(不包含引号)作为变量占位符。

如果要在using语句之外使用userID,则需要在该语句之上声明它。