SqlAdapter 无法识别我的表:异常“无效的对象名称”

Posted

技术标签:

【中文标题】SqlAdapter 无法识别我的表:异常“无效的对象名称”【英文标题】:SqlAdapter does not recognize my table: exception "invalid object name" 【发布时间】:2019-06-05 21:13:06 【问题描述】:

我正在构建小型登录表单,并且出现了这个问题。 我连接了 SQL 服务器(我也尝试了几个不同的连接),表应该是正确的,我没有看到任何问题。

我已经尝试了几个不同的 SQL 连接和新的数据库和表。

private void BtnLogin_Click(object sender, EventArgs e)

    SqlConnection con = new SqlConnection(@"Data Source=MYDESKTOP\MSSQLSERVER01;Integrated Security=True;Connect Timeout=30;Encrypt=False; TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False");

    SqlDataAdapter sqa = new SqlDataAdapter ("SELECT COUNT (*) from LOGINFORM where USERNAME ='" + txtUsername.Text +"' and PASSWORD = '" + txtPassword.Text + "'", con);
    DataTable dt = new DataTable();
    sqa.Fill(dt);

    if (dt.Rows[0][0].ToString() == "1")
    
        this.Hide();
        Form2 main = new Form2();
        main.Show();
    
    else
    
        MessageBox.Show("Username/Password is incorrect. Please try again");
    

期望未处理的无效对象名称“LOGINFORM”

【问题讨论】:

始终使用参数化 sql 并避免字符串连接向 sql 语句添加值。请参阅 How can I add user-supplied input to an SQL statement? 和 Exploits of a Mom。 导致该错误的主要问题是您从未在连接字符串中指定要使用的数据库,因此使用的目录/数据库是与您正在连接的帐户关联的默认目录/数据库,这很可能是master .该数据库确实(也不应该)有一个名为 loginform 的表 【参考方案1】:

您需要在连接字符串中设置“初始目录”。如果您不指定它,那么默认数据库将是“master”,它可能不包含您的表“LOGINFORM”。另一种选择是完全限定查询中的表名,例如 databasename.owner.tablename。

【讨论】:

以上是关于SqlAdapter 无法识别我的表:异常“无效的对象名称”的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis 无法识别映射器 xml 文件 - 无效的绑定语句(未找到)

Spring Security - 无效的列索引异常[重复]

通过 AWS Glue Crawler 识别并存储在数据目录中的表的异常

扩展MVC5和实体框架6 ApplicationUser导致用户注册无效列错误

复合键的 JPQL 异常

如何让Oracle识别英文日期格式