错误'无效的对象名称INFORMATION_SCHEMA.TABLES'

时间:2012-08-24 15:19:48

标签: asp.net sql-server vb.net collation case-sensitive

通过ASP/ C# .NET页面运行以下代码时出现错误:

 SELECT 1 FROM [database].INFORMATION_SCHEMA.TABLES 
 WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME='example_table'

当我在sql management studio query窗口中运行时,代码运行得很好。 它也只针对1个特定server进行了细分 - 当我使用不同的server运行不同的connection string时,它运行正常。

我已经浏览了互联网,而我似乎找到的答案就是有区分大小写的问题,但我使用全部大写,而且有问题的表格正在使用SQL_Latin1_General_CP1_CI_AS collation

基于这一切,我很确定这是一种权限问题,但我不确定在哪里看。

我得到的错误:

  

无效的对象名称'database.INFORMATION_SCHEMA.TABLES'。

连接字符串:

<add name="connectionName" connectionString="Data Source=servername; Initial Catalog=master; User ID=user; Password=pw" providerName="System.Data.SqlClient"/>

更新:

更多信息:我从一些较旧的VB中调整了这些代码,基本上做了同样的事情。 VB代码在相同的服务器和数据库上运行相同的确切查询,但它可以工作。

VB代码:

Dim connStr As String = ConfigurationManager.ConnectionStrings("connectionName").ConnectionString
Dim objConnection As SqlConnection = New SqlConnection(connStr)
Dim objCommand As SqlCommand = New SqlCommand("SELECT 1 FROM [database].INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME='example_table'", objConnection)
objCommand.CommandType = CommandType.Text

objConnection.Open()

C#和VB代码都使用来自web.config的完全相同的连接字符串,所以我想这会让我怀疑它是一个权限问题。仍然不知道问题是什么。

2 个答案:

答案 0 :(得分:0)

我希望这是一个复制粘贴问题,用你的数据库名称更改[数据库]。

答案 1 :(得分:0)

经过多次调试后,我能够确定代码实际上是在错误的服务器上运行。所以,根据我发布的内容,并没有真正找到错误的方法,但我认为Tony基于来回走在正确的轨道上。