SQL 无效的对象名称“地址类型”

Posted

技术标签:

【中文标题】SQL 无效的对象名称“地址类型”【英文标题】:SQL Invalid Object Name 'AddressType' 【发布时间】:2011-02-05 01:06:37 【问题描述】:

当我尝试从 VS 调用 SQL getColumnNames 存储过程时,我在 VS 2008 C# 方法中遇到上述错误。该 SP 接受一个输入参数,即表名,并在 SSMS 中成功运行。目前我正在选择 AdventureWorks AddressType 表,以便从该表中提取列名。我可以从我的服务器资源管理器/数据连接中看到 VS 中可用的 AdventureWorks 表。我在服务器资源管理器中看到了 AddressType 表和 getColumnNames SP。

但我仍然收到上面列出的这个错误。这是我用来执行此操作的 C# 代码 sn-p:

public static DataTable DisplayTableColumns(string tt) SqlDataReader dr = null; 字符串表名 = tt; string connString = "Data Source=.;AttachDbFilename=\"C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\AdventureWorks_Data.mdf\";初始目录=AdventureWorks;Integrated Security=True;连接超时= 30;用户实例=假"; 字符串错误消息; SqlConnection conn2 = new SqlConnection(connString); SqlCommand cmd = conn2.CreateCommand();

    try
    
        cmd.CommandText = "dbo.getColumnNames";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Connection = conn2;
        SqlParameter parm = new SqlParameter("@TableName", SqlDbType.VarChar);
        parm.Value = TableName;
        parm.Direction = ParameterDirection.Input;
        cmd.Parameters.Add(parm);
        conn2.Open();
        dr = cmd.ExecuteReader();
    
    catch (Exception ex)
    
        errorMsg = ex.Message;
    

当我检查 errorMsg 时,它会显示以下内容:

"   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)\r\n   

在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔型 breakConnection)\r\n 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)\r\n 在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)\r\n 在 System.Data.SqlClient.SqlDataReader.ConsumeMetaData()\r\n 在 System.Data.SqlClient.SqlDataReader.get_MetaData()\r\n 在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,字符串 resetOptionsString)\r\n 在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔 returnStream,布尔异步)\r\n 在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔 returnStream,String 方法,DbAsyncResult 结果)\r\n 在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String 方法)\r\n 在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,字符串方法)\r\n 在 System.Data.SqlClient.SqlCommand.ExecuteReader()\r\n 在 C:\Documents and Settings\Admin\My Documents\Visual Studio 2008\Projects\AddFileToSQL\AddFileToSQL\ADONET methods.cs:line 35 中的 ADONET_namespace.ADONET_methods.DisplayTableColumns(String tt)"

第 35 行在哪里

dr = cmd.ExecuteReader();

【问题讨论】:

【参考方案1】:

我迅速检查了 AdventureWorks 数据库,发现“AddressType”表属于“Person”模式。尝试将“Person.AddressType”作为代码中命令参数的值传递。

【讨论】:

伟大的收获,Ashish!这就是问题所在!

以上是关于SQL 无效的对象名称“地址类型”的主要内容,如果未能解决你的问题,请参考以下文章

无效的对象名称 sql

无效的模式名称; Oracle 存储过程输入参数

与 sql server 2014 的无效对象名称 jdbc 连接

SQL 中的函数中的无效对象名称错误

使用临时表时 SQL Server 显示“无效的对象名称 '#temp'”

C# LINQ to SQL 对象名称无效