这将返回datareader,但方法类型为void。如何从方法中获取SqlDataReader值以在业务层中修改它?
[SqlProcedure]
public static void GetStates() // Method
{
using (SqlConnection connection = new SqlConnection("context connection=true"))
{
StringBuilder StateQuery = new StringBuilder();
StateQuery.Append("SELECT OID,Name ");
StateQuery.Append("FROM ");
StateQuery.Append("State");
connection.Open();
SqlCommand command = new SqlCommand(StateQuery.ToString(), connection);
SqlContext.Pipe.ExecuteAndSend(command); //Return
}
}
答案 0 :(得分:0)
您无法使用ExecuteAndSend()获取数据。为了将数据返回给应用程序,您需要打开SqlConnection,使用该SqlConnection创建SqlCommand,并调用SqlCommand.ExecuteReader或SqlCommand.ExecuteScalar。
另一方面,这个问题含糊不清。创建CLR存储过程的原因是将此CLR作为存储过程执行。从这个意义上讲,它不会向应用层发送任何数据,因为它是由T-SQL调用的,而不是由应用层调用。
话虽如此,由于此处的目标是简单地执行SELECT OID, Name FROM State
查询,因此绝对没有理由通过SQLCLR执行此操作。只需在应用层中执行常规SqlCommand即可运行该简单查询或执行封装该查询的常规T-SQL proc。在任何一种情况下,您都将获得一个结果集,因此您可以调用SqlCommand.ExecuteReader()来获取这些结果。这个操作是一个非常直接的来自DB的SELECT,不应该过于复杂的SQLCLR。
附注: