我有一个存储过程,它返回10列数据。使用cmd.ExecuteScalar()
返回第1条记录中第1列的值。
如何通过指定别名/ dataitem名称来更改此设置以便返回不同的列?
我希望能够做到这样的事情:
Dim FirstName as String = cmd.ExecuteScalar("FirstName")
答案 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