这是错误:
“传入的表格数据流(TDS)远程过程调用(RPC) 协议流不正确。表值参数16 (“@InsertRateDetials”),第0行,第0列:数据类型0xF3(用户定义 table type)指定了一个非零长度的数据库名称。数据库 表值参数不允许使用name,只允许使用模式名称 和类型名称有效。“
private void Build()
{
SqlParameter[] parameters =
{
new SqlParameter( "@libLimitationID" , LibLimitation.LibLimitationID),
new SqlParameter( "@admSectionId" , LibLimitation.Section.SectionID),
new SqlParameter( "@libMARCFrameworkID" , LibLimitation.MARCFramework.LibMARCFrameworkID),
new SqlParameter( "@admPatronTypeID" , LibLimitation.PatronType.admPatronTypeID),
new SqlParameter( "@ResLimit" , LibLimitation.ResLimit),
new SqlParameter( "@RenLimit" , LibLimitation.RenLimit),
new SqlParameter( "@LoanPeroid" , LibLimitation.LoanPeriod),
new SqlParameter( "@LoanLimit" , LibLimitation.LoanLimit),
new SqlParameter( "@Fine" , LibLimitation.Fine),
new SqlParameter( "@DateEffective" , LibLimitation.DateEffective),
new SqlParameter( "@InsertedUserID" , LibLimitation.InsertedUserID),
new SqlParameter( "@DateInsert" , LibLimitation.DateInsert),
new SqlParameter( "@UpdatedUserID" , LibLimitation.UpdatedUserID),
new SqlParameter( "@DateUpdate" , LibLimitation.DateUpdate),
new SqlParameter( "@RenPeriod" , LibLimitation.RenewalPeriod),
new SqlParameter( "@InsertRateDetials" , LibLimitation.RateDetails)
};
Parameters = parameters;
}
上面是我试图传递给我的存储过程的参数列表。错误是由最后一行引起的,
new SqlParameter( "@InsertRateDetials" , LibLimitation.RateDetails)
RateDetails 是一个DataTable。
答案 0 :(得分:0)
通常我们为常规参数提供SqlParameter的DbType,如varchar,nvarchar,int等,如下面的代码所示。
示例:强>
SqlParameter sqlParam= new SqlParameter();
sqlParam.ParameterName = "@StudentName";
sqlParam.DbType = DbType.String;
sqlParam.Value = StudentName;
但是在Table参数的情况下,我们不需要提供DbType作为参数数据类型。我们需要提供SqlType而不是DbType。
示例:强>
SqlParameter Parameter = new SqlParameter;
Parameter.ParameterName = "@PhoneBook";
Parameter.SqlDbType = SqlDbType.Structured;
Parameter.Value = PhoneTable;
更多详情:Refer this