1

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

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

公共静态数据表显示表列(字符串 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 n
在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String 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,字符串方法, DbAsyncResult 结果)\r\n
在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String 方法)\r\n
在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为, String 方法)\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 行在哪里

博士 = cmd.ExecuteReader();

4

1 回答 1

1

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

于 2010-04-07T19:11:43.210 回答