【问题标题】:SQL Server: invalid object name in query executionSQL Server:查询执行中的对象名称无效
【发布时间】:2011-03-19 11:16:17
【问题描述】:

我正在尝试执行插入语句,但不断收到 Invalid object name 错误。

这是我的代码:

public string addNewComment(int userID, int pageID, string title, string comment)
{
    string query = "INSERT INTO dbo.nokernok_kommentarer (userID, pageID, commentTitle, comment) " +
    "VALUES ("+ userID +", "+ pageID +", '"+ title +"', '"+ comment +"')";

    adapter.InsertCommand = new SqlCommand(query, connection);

    //ExecuteNonQuery retuens number of rows affected
    int numRows = adapter.InsertCommand.ExecuteNonQuery();
    return numRows.ToString();
}

这是我的错误信息:

System.Data.SqlClient.SqlException: 无效的对象名称 'dbo.nokernok_kommentarer'。在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔型 breakConnection) 在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔型 breakConnection) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) 在 System.Data.SqlClient.TdsParser.Run(运行行为 runBehavior,SqlCommand cmdHandler, SqlDataReader 数据流, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 在 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(字符串 方法名,布尔异步)在 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult 结果,字符串方法名,布尔值 sendToPipe) 在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery() 在 development.DAL.nokernokDAL.addNewComment(Int32 userID,Int32 pageID,字符串标题, 字符串注释)在 C:\Inetpub\wwwroot\naaf\DAL\nokernok.cs:line 49

谁能帮我弄清楚为什么会出现这个错误?

更新

我应该使用正确的数据库,因为以下查询有效:

    public DataSet getSchools(string countyCode)
    {
        DataSet ds = new DataSet();
        string query = "SELECT * FROM nokernok_skoler WHERE kommunekode LIKE '" + countyCode.Substring(0, 2) + "%' ORDER BY enhetsnavn";
        adapter.SelectCommand = new SqlCommand(query, connection);
        adapter.Fill(ds);
        return ds;
    }

我的连接字符串如下所示:

SqlConnection connection = new SqlConnection();
SqlDataAdapter adapter = new SqlDataAdapter();

// class constructor
public nokernokDAL()
{
    connection.ConnectionString = EPiServer.Global.EPConfig["EPsConnection"].ToString();
    connection.Open();
}

【问题讨论】:

    标签: c# sql-server sql-server-2005


    【解决方案1】:

    您可能在错误的数据库中。在连接字符串中包含初始目录:

    Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername; ...
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^
    

    或者指定一个三部分的名称:

    INSERT INTO myDataBase.dbo.nokernok_kommentarer
                ^^^^^^^^^^
    

    【讨论】:

    • @Steven:select SCHEMA_NAME(schema_id) from sys.tables where name = 'nokernok_kommentarer' 返回什么?
    • 它返回dbo。哦哦...等一下...在这里测试一些东西。
    • @Steven:那么.dbo. 部分是正确的。您是否尝试过使用三部分名称?要查找数据库名称,请使用 select DB_NAME()
    • 我想我找到了问题所在。我在一个不再使用的旧数据库中创建了该表。因此,新表从未在正确的数据库中......:-/
    • @Steven - 听起来像我的“您正在连接到您认为正在连接的 数据库?”答案非常接近。我犯了完全相同的错误的次数,啊! :)
    【解决方案2】:

    从错误消息中,您的数据库中似乎不存在表 dbo.nokernok_kommentarer,或者它不是表,因此不可更新。

    您是否检查过:

    • 您正在连接到您认为正在连接的服务器?
    • 您正在连接到您认为正在连接的数据库?
    • 您正在指定正确的目录(或当前称为的目录 =),即您确定它应该是 dbo. 而不是 somethingElse.?
    • dbo.nokernok_kommentarer 表存在吗?

    如果您从代码中复制 SQL 并在 SQL Server Management Studio 之类的工具中运行它,它在那里可以正常工作吗?

    【讨论】:

    • 如果从 SQL Server 管理器执行,查询执行良好。我应该连接到正确的数据库,因为SELECTqueries 工作正常。
    • @Steven 在您的示例中,您插入到dbo.nokernok_kommentarer,但从nokernok_skoler 中选择。你能从 dbo.nokernok_kommentarer 成功 SELECT 吗?
    猜你喜欢
    • 2018-04-22
    • 2018-08-08
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 2017-03-09
    • 2023-03-23
    • 2019-12-09
    • 1970-01-01
    相关资源
    最近更新 更多