通过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的完全相同的连接字符串,所以我想这会让我怀疑它是一个权限问题。仍然不知道问题是什么。
答案 0 :(得分:0)
我希望这是一个复制粘贴问题,用你的数据库名称更改[数据库]。
答案 1 :(得分:0)
经过多次调试后,我能够确定代码实际上是在错误的服务器上运行。所以,根据我发布的内容,并没有真正找到错误的方法,但我认为Tony基于来回走在正确的轨道上。