尝试插入表值参数时出错

时间:2016-06-06 10:40:52

标签: c# sql asp.net

这是错误:

  

“传入的表格数据流(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。

1 个答案:

答案 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