C# 当SQL Server表中的对象有效时,为什么会得到无效的对象名?

C# 当SQL Server表中的对象有效时,为什么会得到无效的对象名?,c#,sql,object,C#,Sql,Object,我正在尝试在运行时执行SQL查询: SqlConnection connection = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False");

我正在尝试在运行时执行SQL查询:

        SqlConnection connection = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False");
        SqlCommand cmd = new SqlCommand();
        SqlDataReader reader;
        cmd.CommandText = "SELECT * FROM dbo.Books_in_Storage WHERE author = 'myself'";
        cmd.CommandType = System.Data.CommandType.Text;
        cmd.Connection = connection;
        connection.Open();
        reader = cmd.ExecuteReader();
        connection.Close();
执行到达
reader=cmd.ExecuteReader()并给出错误信息:

无效的对象名
dbo.Books在存储器中

如果查看我的SQL Server对象资源管理器,我可以看到存储中的
dbo.Books
存在:


为什么会发生这种情况?

在SQL Server中,您可以使用如下所示的[]查询带有空格的表,但是,在选择数据库表名时包含空格是不正常的

SELECT * FROM [table name]

存储中的书籍
存储中的书籍
是不同的。最好将表重命名为不使用空格。这只是3980437个不在表和对象名称中使用下划线或(特别是)空格的原因之一。[dbo.Books\u in_Storage]?-但也要避免下划线,所以“存储中”对我来说似乎是个危险信号。它们可能只是带有字段(或相关字段或计算)的“书籍”,以指示它们是否在存储中。似乎您已使用AttachDbFileName创建了一个数据库,但现在您不再在连接字符串中使用该属性,并且您也没有指定要连接的任何数据库。因此,您的查询针对的是主数据库,其中没有具有该名称的表。(当然,建议不要有空格的桌子是绝对正确的)