gpt4 book ai didi

带有 ushort 字段的 C# DataTable 作为 SQL Server 存储过程的参数

转载 作者:行者123 更新时间:2023-11-30 23:11:31 25 4
gpt4 key购买 nike

我在 SQL Server 中有一个存储过程,它有一个表值类型作为参数。

表值类型如下:

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字符串
  • Field1 空缺
  • Field2 空缺
  • 日期日期时间

然后我创建一个 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'".

我该如何解决这个问题?

最佳答案

SQL Server 中的

smallint 已签名。您需要在 C# 代码中使用匹配的签名数据类型(即 short)。这应该很简单:

    dt.Columns.Add("ID", typeof(string)).SetOrdinal(0);           
dt.Columns.Add("Field1", typeof(short)).SetOrdinal(1);
dt.Columns.Add("Field2", typeof(short)).SetOrdinal(2);
dt.Columns.Add("Date", typeof(DateTime)).SetOrdinal(3);

关于带有 ushort 字段的 C# DataTable 作为 SQL Server 存储过程的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44629230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com