1

VS から SQL getColumnNames ストアド プロシージャを呼び出そうとすると、VS 2008 C# メソッドで上記のエラーが発生します。この SP は、1 つの入力パラメーター (テーブル名) を受け入れ、SSMS から正常に動作します。現在、AdventureWorks AddressType テーブルを選択して、このテーブルから列名を取得しています。サーバー エクスプローラー/データ接続から VS で使用できる AdventureWorks テーブルを確認できます。サーバー エクスプローラーには、AddressType テーブルと getColumnNames SP の両方が表示されます。

しかし、私はまだ上記のエラーが発生しています。これを実行するために使用する C# コード スニペットを次に示します。

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;統合セキュリティ=True;接続タイムアウト= 30;ユーザー インスタンス = False"; 文字列エラーメッセージ; SqlConnection conn2 = 新しい 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
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)\r\n
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) で\r\n
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, 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行目の場所

dr = cmd.ExecuteReader();

4

1 に答える 1

1

AdventureWorks データベースをすばやく確認したところ、テーブル "AddressType" がスキーマ "Person" に属していることがわかりました。コード内のコマンドパラメータの値の値として「Person.AddressType」を渡してみてください。

于 2010-04-07T19:11:43.210 に答える