用户代码(参数化查询)未处理SqlException

时间:2014-02-02 05:08:27

标签: visual-studio-2010

公共帐户getAccount(字符串userID)         {             帐户accountFound = null;

        string Name, Password, Email, PhoneNum, Address;

        string queryStr = "SELECT * FROM Account WHERE userID = @userID ";

        SqlConnection conn = new SqlConnection(_connStr);
        SqlCommand cmd = new SqlCommand(queryStr, conn);
        cmd.Parameters.AddWithValue("@userID", userID);

        conn.Open();
        SqlDataReader dr = cmd.ExecuteReader();

        if (dr.Read())
        {
            userID = dr["UserID"].ToString();
            Name = dr["Name"].ToString();
            Password = dr["Password"].ToString();
            Email = dr["Email"].ToString();
            PhoneNum = dr["PhoneNum"].ToString();
            Address = dr["Address"].ToString();


            accountFound = new Account(userID, Name, Password, Email, PhoneNum, Address);
        }

        conn.Close();
        dr.Close();
        dr.Dispose();

        return accountFound;
    }
你好!我的程序出错了。以上是我的代码! 错误信息 : 用户代码未处理SqlException 参数化查询'(@ userID nvarchar(4000))SELECT * FROM Account WHERE userID = @us'需要参数'@ userID',这是未提供的。

需要你的帮助!谢谢!

2 个答案:

答案 0 :(得分:0)

我相信如果您检查UserID的值,就会发现它是Null

如果您尝试找到NULL UserId的用户,那么您将执行:

string queryStr = "SELECT * FROM Account WHERE userID IS NULL";
                                                      ^^^^^^^

[不相关,但我还建议使用using语句来包装你的连接和命令。]

答案 1 :(得分:0)

像Mitch Wheat说的那样,你需要在检查相等性之前检查参数是否有值。您可以在函数中添加一个检查,以确保它具有值:

public Account getAccount(string userID) { Account accountFound = null;
     if (String.IsNullOrEmpty(userID))
          return accountFound;

//leave everything else 

然后,您必须处理在调用此函数后发生的任何事情返回的null值。