4

値を抽出したい SQL の 2 つの列を含むテーブルがあります。問題は、C# コードで列 2 の値を取得する方法がわからないことです。SQL Server 2008 と VS を使用しています。SP で OUTPUT パラメーターを使用する必要がありますか? その場合、この SP をどのように指定しますか? OUTPUT パラメーターを試してみましたが、COLUMN_NAME も選択しようとしているため、エラーなしで OUTPUT パラメーターを作成できません。このクエリから返される列は 4 つあり、この数の列も取得したいだけです。これを行うにはもっと簡単な方法があるはずですよね?これは SQL では機能しますが、C# では機能しません。

ここに私のSPがあります:

CREATE PROCEDURE [dbo].[getColumnNames]
    @TableName varchar(25) 
AS
    SELECT name 'COLUMN_NAME', (
         SELECT COUNT(ID)
         FROM syscolumns WHERE id = (
             SELECT id
             FROM sysobjects
             WHERE name= @TableName)) 'ROW_COUNT'
    FROM syscolumns
    WHERE id = (SELECT id FROM sysobjects WHERE name= @TableName)
    RETURN

そして、これがこの SP を呼び出す私の C# コードです。

public static SqlDataReader DisplayTableColumns(string tt)
{
    SqlDataReader dr = null;
    string TableName = tt;
    string connString = "Data Source=.;AttachDbFilename=\"C:\\Program Files\\Microsoft SQL Server\\...";
    string errorMsg;

    try
    {
        SqlConnection conn2 = new SqlConnection(connString);
        SqlCommand cmd = conn2.CreateCommand();
        cmd.CommandText = "dbo.getColumnNames";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Connection = conn2;
        cmd.Parameters.Add(new SqlParameter("@TableName", TableName));
        conn2.Open();
        dr = cmd.ExecuteReader();
    }
    catch (Exception ex)
    {
        errorMsg = ex.Message;
    }
    return dr;
}
4

1 に答える 1

6

データ リーダーから列を読み取るには、結果セットでそのインデックスを指定するだけです。したがって、上記で作成したクエリから値を取得するには、次のように記述できます。

// straight after this line:
dr = cmd.ExecuteReader();

if (dr.Read()) // you only have one row so you can use "if" instead of "while"
{
    var columnName = dr.GetString(0);
    var rowCount = dr.GetInt32(1);
}

編集おっと!最初に読む必要があります。コードを更新しました。

于 2010-01-04T00:40:23.767 に答える