2
我在SQL Server中有一个存储过程,它具有表值类型作为参数。以ushort字段作为SQL Server存储过程的参数的C#数据表
表值类型如下:
CREATE TYPE [Serveis].[tblType_DispensadorBebidas_Abonados] AS TABLE
(
[ID] [varchar](9) NOT NULL,
[Field1] [smallint] NOT NULL,
[Field2] [smallint] NOT NULL,
[Date] [datetime] NOT NULL,
PRIMARY KEY ([ID])
)
然后存储过程借此表值类型作为参数:
PROCEDURE [dbo].[AddData]
@DataTable MytableValuedType READONLY
从C#创建数据表如下:
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(string)).SetOrdinal(0);
dt.Columns.Add("Field1", typeof(ushort)).SetOrdinal(1);
dt.Columns.Add("Field2", typeof(ushort)).SetOrdinal(2);
dt.Columns.Add("Date", typeof(DateTime)).SetOrdinal(3);
dt.Rows.Add(this.ID,this.Field1,this.Field2,this.Date);
在C#中的数据类型有:
- ID字符串
- 字段1 USHORT
- 字段2 USHORT
- 日期日期时间
,然后我创建一个SQL参数:
SqlParameter param = new SqlParameter();
param.ParameterName = "@DataTable";
param.Value = dt;
param.SqlDbType = SqlDbType.Structured;
添加它使用command.Parameters.Add (param)
,最后我调用了ExecuteNonQuery。
它引发错误(译自西班牙语):
Column type 'Field1' not allowed. The type is "'UInt16'".
我怎么能解决这个问题?