【问题标题】:SQLDataReader Invalid object nameSQLDataReader 对象名称无效
【发布时间】:2013-04-05 09:11:36
【问题描述】:

我正在尝试通过从我的数据库 UsersDB 中读取用户详细信息来通过登录表单对用户进行身份验证。在尝试读取时,我收到一个错误:无效的对象名称:UsersDB

向数据库添加新用户时我没有收到任何错误,所以我不知道为什么会收到此错误。这是我得到的堆栈跟踪:

[SqlException (0x80131904): Invalid object name 'UsersDB'.]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +388
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +810
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4403
System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +82
System.Data.SqlClient.SqlDataReader.get_MetaData() +135
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +6666037
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite) +6667856
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +577
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +107
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +288
System.Data.SqlClient.SqlCommand.ExecuteReader() +302
AuthWebRole.Account.UserLogin.Buttonlogin_Click(Object sender, EventArgs e) in c:\Users\Tamara\Documents\Visual Studio 2012\Projects\TCWalletAzure\AuthWebRole\Account\UserLogin.aspx.cs:32
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +155
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3804

编辑:

查询如下:(我在我的代码中替换了我的用户名和密码)

string strcon = "Server=tcp:qemcclhlar.database.windows.net,1433;Database=UsersDB;User ID=[userid];Password=[mypassword];Trusted_Connection=False;Encrypt=True;Connection Timeout=30";
        SqlConnection con = new SqlConnection(strcon);

        SqlCommand com = new SqlCommand("CheckUser", con);
        com.CommandType = CommandType.StoredProcedure;
        SqlParameter user = new SqlParameter("username", UserName.Text);
        SqlParameter pword = new SqlParameter("password", Password.Text);
        com.Parameters.Add(user);
        com.Parameters.Add(pword);
        con.Open();
        SqlDataReader rd = com.ExecuteReader();
        if (rd.HasRows)
        {
            rd.Read();
            LabelInfo.Text = "Login successful.";
        }

        else
        {
            LabelInfo.Text = "Invalid username or password.";

        }

数据库架构:

数据库:带有表 UserTable 的 UsersDB

【问题讨论】:

  • 显示您的数据库架构和查询,而不是无意义的异常。
  • 我在编辑中添加了查询

标签: sql database login sqldatareader


【解决方案1】:

这里最重要的可能是连接字符串。执行以下操作:创建一个空文本文件并将其重命名为“myconnection.udl”。现在双击该文件,它将启动一个小程序。您可以配置与数据库的连接并对其进行测试。现在在记事本中打开 udl 文件,您将看到正确的连接字符串。将连接字符串复制到您的应用连接设置。 UDL 文件通常被误解。它们只是一个保存连接设置的文本文件。然后他们调用连接 dll。如果 udl 文件有效,那么你有一个正确的连接字符串 100%

【讨论】:

    【解决方案2】:

    我解决了我的问题 - 我在过程查询中输入了错误的表。它必须如下:

    创建过程检查用户 ( @username 作为 varchar(50), @password 作为 varchar(50) ) 作为 SELECT * FROM UserTable WHERE Username=@username AND Password=@password

    我错误地输入了 UsersDB 而不是 UserTable

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      • 2013-05-17
      • 2018-06-15
      • 1970-01-01
      相关资源
      最近更新 更多