嘗試(非工作)解決方案包含在下面。 我有一個SQL函數調用GET_PARAMETER看起來在表中給定的字符串,返回相關的字符串:從CLR中的SQL函數獲取字符串值
declare @str varchar(20);
set @str = dbo.get_parameter('filecount')
print @str
它的工作原理!我運行它並打印出它應該打印的內容。在這種情況下,參數是字符串'44'。
現在我想運行一個C#CLR。但是我希望CLR能夠查找它需要的參數。
[SqlFunction(DataAccess = DataAccessKind.Read)]
public static string Import_TestFunc()
{
using (SqlConnection conn = new SqlConnection("context connection=true"))
{
SqlCommand command = new SqlCommand();
command.Connection = conn;
conn.Open();
// Find out how many files DSAMS processing requires.
command.CommandText = @"EXEC get_parameter 'filecount' ";
string cnt = (string)command.ExecuteScalar();
if (String.IsNullOrEmpty(cnt))
{
return "'cnt' not found."; // error return code. can't find this parameter.
}
return cnt;
}
}
但是,這是行不通的。它始終認爲cnt的值在從get_parameter返回時爲空(或空)。
按照要求,對於GET_PARAMETER
ALTER FUNCTION [dbo].[get_parameter]
(
@SelectedParameterName nvarchar(max)
)
RETURNS nvarchar(max)
AS
BEGIN
DECLARE @result nvarchar(max);
SET @result = (SELECT ParameterValue from Parameters WHERE ParameterName = @SelectedParameterName);
RETURN isnull(@result,'');
END
我已經嘗試瞭解決方案,按照以下麥克迪內斯庫的代碼,但它的問題是,在調用的ExecuteScalar()仍然會返回一個空。我曾嘗試改變CommandType.Text在這種情況下,我得到了以下有趣的消息:
A .NET Framework error occurred during execution of user-defined routine or aggregate "Import_TestFunc":
System.Data.SqlClient.SqlException: Procedure or function 'get_parameter' expects parameter '@SelectedParameterName', which was not supplied.
這很有趣,因爲我在它添加參數@SelectedParameterName尋找正確的。
command.Parameters.Add(new SqlParameter("@SelectedParameterName", SqlDbType.NVarChar)).Value = "filecount";
你也許會比較蘋果和橘子?您的SQL函數與您的手動腳本不完全相同。 'EXEC get_parameter'filecount'與SET ... = dbo.get_parameter('filecount')'不一樣。 – stakx 2014-09-29 18:24:06
你說這是一個函數,但是在你的CLR中,你像一個程序調用。將您的CLR代碼更改爲「選擇dbo.get_parameter('filecount')」 – 2014-09-29 18:24:23
向我們顯示'dbo.get_parameter'的定義。至少頭部,如果不是整個身體。 – RBarryYoung 2014-09-29 18:25:08