【问题标题】:Cannot find the object because it does not exist找不到对象,因为它不存在
【发布时间】:2012-03-05 02:24:24
【问题描述】:

在发布这个问题之前,我确实花了一个小时搜索。

该表确实存在,我可以查询该表,我可以看到结果集,但是当我尝试从 Visual Studio 2008 执行时,我收到以下错误:

Cannot find the object "Products" because it does not exist or you do not have permissions

为什么会出现这个错误,我应该怎么做才能解决它?

using (System.Data.SqlClient.SqlCommand cmd = connection.CreateCommand() as System.Data.SqlClient.SqlCommand)
{
   cmd.CommandText = "SET IDENTITY_INSERT Products ON";
   cmd.CommandType = CommandType.Text;
   cmd.ExecuteNonQuery();
}

我尝试指定dbo.Products,在执行之前我还尝试了use dbname,但这没有帮助。

【问题讨论】:

  • 您是该表的所有者还是拥有该表的ALTER 权限?这些是在表上执行SET IDENTITY_INSERT 的权限先决条件。
  • ConnectionString 是否指定了正确的数据库?
  • @Pat:是的,它指向正确的数据库,正如我所说,如果我连接到不同的表,它可以正常工作
  • @Shark:我能够在查询中运行SET IDENTITY_INSERT ,我没有收到任何错误
  • 也许 Products 表是在与 Visual Studio 连接的 SQL Server 实例不同的 SQL Server 实例中创建的,例如,阶段而不是开发。

标签: sql-server-2008


【解决方案1】:

花了几个小时并失去了几根头发后,我发现问题出在连接字符串中(但这仍然无法说服我),正如我所说的那样,我没有任何问题,但突然弹出并我没有改变任何东西(谁知道 dba 改变了什么)

所以我尝试调整我的连接字符串,它确实会生成一个字符串 看看它是否有所作为:确实如此。

c.Provider = 'sqloledb'
dsn = 'Server=MyServer;Database=MyDB;Trusted_Connection= Yes'
c.Open(dsn)

我添加到连接字符串中的唯一内容是Trusted_Connection= Yes

PS:SET IDENTITY_INSERT 在您的会话中保持打开状态,直到 你把它关掉,它一次只能在一张桌子上打开

希望这对其他人有所帮助...

【讨论】:

【解决方案2】:

发生错误是因为您尚未设置数据库上下文。如果您将“use (dbname) go”(使用您的数据库名称)添加到查询的开头,它将起作用。

[编辑] 抱歉没有发现你已经尝试过了。也许您连接到错误的服务器?尝试将代码中的查询更改为“create table argh (argh int)”并检查它是否第二次失败。然后追踪它创建它的位置!

【讨论】:

  • @AbuHamzah OP = 原始海报,即在这种情况下是你! :-)
猜你喜欢
  • 2016-11-22
  • 2015-05-27
  • 2010-12-08
  • 2017-03-19
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
相关资源
最近更新 更多