我有一个存储过程,它返回 10 列数据。使用cmd.ExecuteScalar()
从第一条记录返回第一列的值。
如何通过指定别名/数据项名称来更改它以便可以返回不同的列?
我希望能够做类似的事情:
Dim FirstName as String = cmd.ExecuteScalar("FirstName")
我有一个存储过程,它返回 10 列数据。使用cmd.ExecuteScalar()
从第一条记录返回第一列的值。
如何通过指定别名/数据项名称来更改它以便可以返回不同的列?
我希望能够做类似的事情:
Dim FirstName as String = cmd.ExecuteScalar("FirstName")
您可以创建一个调用 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);
}
}
}
你不能。Command.ExecuteScalar
不带参数..
您可以做的是使用文本命令并修改其CommandText
属性值以包含您需要获取的列:
command.CommandText = "SELECT " + columnName + " FROM Table WHERE Key = " + ...
您可以创建一个扩展方法来为您执行此操作。C# equiv(我想您可以很容易地将其转换为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");
您也应该尝试以下代码。
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