无效的对象名称' DB'

时间:2015-05-17 09:32:43

标签: c# mysql

我是初学者,希望使用C#.net - Web应用程序实现基本登录页面。我已经成功创建了数据库,并且可以测试连接是否正常。当控件命中ExecuteReader()命令时,我收到以下错误消息。

错误:

  

类型' System.Data.SqlClient.SqlException'的异常发生在   System.Data.dll但未在用户代码中处理

     

其他信息:无效的对象名称' UserDB'。

程序:

string LoginDbCS =ConfigurationManager.ConnectionStrings["UserDB"].ConnectionString;
string ID = TextBoxUserId.Text;
SqlConnection Conn = new SqlConnection(LoginDbCS);
{
    string sCmdStr = "select Password from UserDB where UserID=@ID";
    SqlCommand sCmd = new SqlCommand(sCmdStr, Conn);

    SqlParameter param = new SqlParameter();
    param.ParameterName = "@ID";
    param.Value = TextBoxUserId.Text;

    sCmd.Parameters.Add(param);
    Conn.Open();

    SqlDataReader sReader = sCmd.ExecuteReader();
    sReader.Read();

    if ((string)sReader["Password"]==TextBoxPassword.Text)
    {
        Label5.Text = "Login Successful";
    }
    else
    {
        Label5.Text = "No Records found";
    }

    sReader.Close();
    Conn.Close();
}

}

期待有关修复此崩溃的建议。

1 个答案:

答案 0 :(得分:2)

嗯,sohaiby在评论中回答了您的问题,但您的代码存在一些更深层次的问题,您应该解决这些问题。
我相信作为一个初学者,然后作为有不良编码标准经验的人,学习良好的编码标准会更容易,因为当事情变坏时,人们经常会去熟悉的东西。

所以,这里有一些不好的做法,你应该取代A.S.A.P:

  • 使用保留字作为对象名称。 See my answer to this question用于命名sql对象的方法的细节。其他人可能会使用其他方法。你不必采用我的,但它是我所知道的最好的。
  • 从数据库中检索所有密码,并在代码中检查密码是否正确。您已经知道用户输入的密码。只需将其作为另一个参数添加到sql语句中并添加条件:
    string sCmdStr = "select * from UserDB where UserID=@ID AND Password = @Password";
  • 使用阅读器查询您实际上不需要数据的查询 在登录页面中,通常您只想知道用户是否输入了正确的用户名和密码。不需要从数据库返回实际数据(除非您想获得有关用户的一些详细信息,例如姓/名,上次登录日期等)。在这些情况下,您可以使用ExecuteScalar从数据库中获取单个值 如果查询未返回任何结果,则ExecuteScalar将返回null。 read how to handle this here.
  • 在没有Using声明的情况下使用IDisposable(在您的情况下为SqlConnection)。

我希望这有助于您学习更好的编码标准并提高编码技能。

快乐编程!