1

10 列のデータを返すストアド プロシージャがあります。を使用cmd.ExecuteScalar()すると、1 番目のレコードから 1 列目の値が返されます。

エイリアス/データ項目名を指定して、別の列を返すことができるようにするにはどうすればよいですか?

私は次のようなことができるようにしたい:

Dim FirstName as String = cmd.ExecuteScalar("FirstName")
4

4 に答える 4

2

ExecuteReaderを呼び出すメソッドを作成し、列名とともにGetOrdinalを使用して、GetStringを呼び出すことができます。

私のVBは存在しませんが、これは拡張メソッドのC#です。

public static class SqlCommandExt
{
    public static string ExecuteScalar(this SqlCommand cmd, string columnName)
    {
        using (var reader = cmd.ExecuteReader())
        {
            if (!reader.Read())
                return null;

            var index = reader.GetOrdinal(columnName);
            return reader.GetString(index);
        }
    }
}
于 2011-06-01T16:31:26.733 に答える
1

それはいけません。Command.ExecuteScalarパラメータを取らない..

できることは、テキスト コマンドを使用し、そのCommandTextプロパティ値を変更して、取得する必要がある列を含めることです。

command.CommandText = "SELECT " + columnName + " FROM Table WHERE Key = " + ...
于 2011-06-01T16:24:45.250 に答える
1

これを行う拡張メソッドを作成できます。C# に相当するもの ( VB.NET 拡張機能に簡単に変換できると思います):

public static T ExecuteScalar<T>(this SqlCommand cmd, String columnName)
{
    using(var reader = cmd.ExecuteReader())
    {
        var item = default(T);
        if(reader.Read())
        {
            item = (T)dataReader.GetValue(dataReader.GetOrdinal(columnName))
        }
        return item;
    }
}

...そして次のように呼び出します:

var firstName = cmd.ExecuteScalar<String>("FirstName");
于 2011-06-01T16:38:29.583 に答える