我有一些ADO.Net代码,如下所示,它在DB中成功执行SP,而在tenantId抛出异常,请指导我。
char*first(int i)
{
int j,k=0,x;
char temp[500], *str;
for(j=0;grammar[i][j]!=NULL;j++)
{
if(islower(grammar[i][j][0]) || grammar[i][j][0]=='#' || grammar[i][j][0]==' ')
{
temp[k]=grammar[i][j][0];
temp[k+1]='\0';
}
else
{
if(grammar[i][j][0]==terminals[i])
{
temp[k]=' ';
temp[k+1]='\0';
}
else
{
x=hashValue(grammar[i][j][0]);
str=first(x);
strncat(temp,str,strlen(str));
}
}
k++;
}
return temp;
}
在 command.Parameters.Input.BigInt(ParameterConstants.TenantId)
.BigInt(ParameterConstants.PartyId, tenant.PartyId)
.Varchar(ParameterConstants.TenantCode, tenant.TenantCode)
.BigInt(ParameterConstants.PharmaId, tenant.PharmaId)
.BigInt(ParameterConstants.UserId, userProfileId);
command.ExecuteNonQuery();
var tenantId = command.Parameters.GetValue<long>(ParameterConstants.TenantId);
它会抛出强制转换异常var tenantId
...
确切异常System.InvalidCastExceptio
Specified cast is not valid.
答案 0 :(得分:1)
您的GetValue<long>
方法可能无法处理NULL
值。那个GetValue<>
可能是你或别人写的自定义方法(不是微软),所以我不知道如何修复它。你可以尝试:
var tenantId = command.Parameters.GetValue<long?>(ParameterConstants.TenantId);
答案 1 :(得分:0)
我的猜测是TenantId的数据库类型和类类型不兼容。例如,string vs int vs long。