SqlCommand.ExecuteScalar - 指定特定数据项

时间:2011-06-01 16:21:03

标签: vb.net sql-server-2005 sqlcommand executescalar

我有一个存储过程,它返回10列数据。使用cmd.ExecuteScalar()返回第1条记录中第1列的值。

如何通过指定别名/ dataitem名称来更改此设置以便返回不同的列?

我希望能够做到这样的事情:

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

4 个答案:

答案 0 :(得分: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);
        }
    }
}

答案 1 :(得分:1)

你做不到。 Command.ExecuteScalar不参数..

您可以做的是使用文本命令并修改其CommandText属性值以包含您需要获取的列:

command.CommandText = "SELECT " + columnName + " FROM Table WHERE Key = " + ...

答案 2 :(得分:1)

您可以创建一个扩展方法来为您执行此操作。 C#equiv(我想你可以很容易地翻译成VB.NET extension):

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");

答案 3 :(得分:0)

您也应该尝试以下代码。

Private Sub YourFunctionName()
        Using con As System.Data.SqlClient.SqlConnection = New SqlConnection("YourConnection string")
            con.Open()
            Using cmd As SqlCommand = New SqlCommand
                Dim expression As String = "Parameter value"
                cmd.CommandType = CommandType.StoredProcedure
                cmd.CommandText = "Your Stored Procedure"
                cmd.Parameters.Add("Your Parameter Name", SqlDbType.VarChar).Value = expression
                cmd.Connection = con
                Using dr As IDataReader = cmd.ExecuteReader()
                    If dr.Read() Then
                        Dim str As String = dr("YourColumnName").ToString()
                    End If
                End Using
            End Using
        End Using
    End Sub