【发布时间】:2016-06-22 23:04:24
【问题描述】:
我正在尝试将几个 TVR 放在一起,但我一直收到以下错误:
从用户定义的表值函数获取新行时出错:
System.InvalidCastException:无法将“System.Char”类型的对象转换为“ResultRow”类型。
CLR.WorkFunctions.FillRow 处的 System.InvalidCastException(对象 resultsObj, SqlString&policyURL、SqlString&fileCachePath、SqlString&identity、 SqlString&格式,SqlString&用户名,SqlString&密码,SqlString&数据)
我正在尝试调用一个对传递的数据执行一些工作的 Web 服务,然后将返回的值加载到枚举器中。但是,如上所示,我反复遇到输入错误,此时我不确定原因。我的想法是它变得不安,因为我试图用字符串而不是 SqlStrings 填充行,所以我改变了它。但是,Web 服务只接受字符串形式的参数,所以我必须在 Web 服务调用中将它们转换过来。这是我的代码:
public class WorkFunctions
{
private class ResultRow
{
public string PolicyURL;
public string FileCachePath;
public string Identity;
public string Format;
public string UserName;
public string Password;
public string Data;
}
[Microsoft.SqlServer.Server.SqlFunction(
FillRowMethodName = "FillRow",
TableDefinition = "policyName nvarchar(500), fileCache nvarchar(500),
identity nvarchar(500), format nvarchar(500), userName nvarchar(500),
password nvarchar(500), data nvarchar(500)")]
public static IEnumerable Work(SqlString serviceURL, SqlString policyURL, SqlString fileCachePath, SqlString identity, SqlString format, SqlString userName, SqlString password, SqlString data)
{
IEnumerable values;
try
{
CLR.Work.WorkService.WorkMethods workMethods = new CLR.Work.WorkService.WorkMethods();
workMethods.Url = Convert.ToString(serviceURL);
values = workMethods.Work(Convert.ToString(policyURL), Convert.ToString(identity), Convert.ToString(format), Convert.ToString(userName), Convert.ToString(password), Convert.ToString(fileCachePath), Convert.ToString(data));
}
catch (Exception ex)
{
return "Failed to return data";
}
return values;
}
public static void FillRow(Object resultObj,
out SqlString policyURL, out SqlString fileCachePath,
out SqlString identity, out SqlString format,
out SqlString userName, out SqlString password,
out SqlString data)
{
ResultRow resultRow = (ResultRow)resultObj;
policyURL = new SqlString(resultRow.PolicyURL);
fileCachePath = new SqlString (resultRow.FileCachePath);
identity = new SqlString (resultRow.Identity);
format = new SqlString (resultRow.Format);
userName = new SqlString (resultRow.UserName);
password = new SqlString (resultRow.Password);
data = new SqlString (resultRow.Data);
}
}
}
这是我第一次与 TVF 合作,我对目前可能导致此问题的原因感到有些茫然。如果有人能提供一些想法,我将不胜感激。
谢谢。
【问题讨论】:
标签: c# user-defined-functions sqlclr