gpt4 book ai didi

c# - 将 DataTable 作为参数传递给存储过程

转载 作者:太空狗 更新时间:2023-10-29 18:17:49 24 4
gpt4 key购买 nike

我有一个用 C# 创建的数据表。

DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Age", typeof(int));

dt.Rows.Add("James", 23);
dt.Rows.Add("Smith", 40);
dt.Rows.Add("Paul", 20);

我想将其传递给以下存储过程。

CREATE PROCEDURE  SomeName(@data DATATABLE)
AS
BEGIN
INSERT INTO SOMETABLE(Column2,Column3)
VALUES(......);
END

我的问题是:我们如何将这 3 个元组插入到 SQL 表中?我们是否需要使用点运算符访问列值?或者还有其他方法吗?

最佳答案

您可以更改存储过程以接受 table valued parameter作为输入。但是,首先,您需要创建一个与 C# DataTable 结构相匹配的用户定义表 TYPE:

CREATE TYPE dbo.PersonType AS TABLE
(
Name NVARCHAR(50), -- match the length of SomeTable.Column1
Age INT
);

调整存储过程:

CREATE PROCEDURE dbo.InsertPerson
@Person dbo.PersonType READONLY
AS
BEGIN
INSERT INTO SomeTable(Column1, Column2)
SELECT p.Name, p.Age
FROM @Person p;
END

在C#中,绑定(bind)数据表到PROC参数时,需要指定参数为:

parameter.SqlDbType = SqlDbType.Structured;
parameter.TypeName = "dbo.PersonType";

另请参阅此处的示例 Passing a Table-Valued Parameter to a Stored Procedure

关于c# - 将 DataTable 作为参数传递给存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29507629/

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