【问题标题】:invalid object name sql exception for table name in c#c#中表名的对象名无效sql异常
【发布时间】:2015-11-10 08:52:06
【问题描述】:

我写了这段代码,但它不起作用。给出无效的对象名称“库存”。有什么建议吗?

 using (SqlConnection cn = new SqlConnection())
        {
            cn.ConnectionString =
            @"Data Source=(local);Integrated Security=SSPI;" +
            "Initial Catalog=AutoLot";
            cn.Open();
            string strSQL = "Select * From Inventory";
            SqlCommand myCommand = new SqlCommand(strSQL, cn);
            // Obtain a data reader a la ExecuteReader().
            using (SqlDataReader mydatareader = mycommand.ExecuteReader())
            {}

【问题讨论】:

  • 错误很明显 - 您的数据库不包含表 Inventory是否AutoLot 数据库包含一个名为Inventory 的表? 您是否有权阅读它?
  • 你也确定这个Inventory 表在默认模式中吗?
  • Inventory 表在什么模式中?是dbo.Inventory 吗?还是...?
  • 怀疑错误消息的表名前有等号 (=Inventory) - 您真的复制并粘贴了您的代码吗?或者您是否尝试重现您认为您的代码所说的内容?
  • 另外:它是 相同的大小写 吗? SQL Server 是否区分大小写是一个配置设置;最好的做法是始终把它做好,即使它会变得不敏感

标签: c# database ado.net


【解决方案1】:

检查数据库库存表是否存在,如果存在则两个名称应该相同

【讨论】:

  • 它现在也一样。
  • 检查两次它是否存在您在代码中使用的相同数据库?
  • 关键是:哪个模式;如果它没有显示为dbo,那么对于大多数应用场景来说可能是错误的(除非你知道你在用模式做什么)
【解决方案2】:

如果您检查了所有数据库设置、访问权限和表定义,但仍然无法摆脱该错误?

这是因为 ASP.net 无法理解您的 SQL 查询 - 这听起来很令人震惊。

我遇到了同样的问题,UPDATE 语句想要使用 aliases 而不是通常预期的 dbo.myTable 名称定义。

避免这种情况的最简单方法是,将代码放入Stored Procedure

这是我直接来自 SQL Server 2005 的 SQL,它按原样完美运行...

UPDATE tsa
SET tsa.ActionComplete = @ActionComplete,
    tsa.CompleteDate = GETDATE(),
    tsa.Notes = @ActionNotes
FROM blahblah
WHERE blahblah

但不知为何,SqlDataSource 控件中的 ASP.net 解析器无法理解它(即使它在 GUI 的 Test Query 功能中完美运行!)。 p>

我得到了

“tsa”中的对象名称无效

所以我将批次放在存储过程中......

USE [mydatabase];
GO
SET  ANSI_NULLS ON;
GO
SET  QUOTED_IDENTIFIER ON;
GO
ALTER PROCEDURE [dbo].[spTETupdateActions]
    @StudentID VARCHAR(10),
    @ActionComplete INT = 0,
    @ActionNotes VARCHAR(MAX),
    @TETmeetingID INT,
    @WeekNo INT,
    @TETID INT,
    @TETdate DATETIME,
    @ActionItem VARCHAR(MAX)
    WITH
    EXEC AS CALLER AS
UPDATE tsa
SET tsa.ActionComplete = @ActionComplete,
    tsa.CompleteDate = GETDATE(),
    tsa.Notes = @ActionNotes
FROM blahblah
WHERE blahblah
GO

瞧!没有更多的错误!为什么?因为 SQL 的解析是在 SQL Server 而不是 ASP.net 内部完成的!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多