如何从存储过程插入到表(用户定义类型)并传递给 c#

本文关键字:类型 定义 用户 存储过程 插入 | 更新日期: 2023-09-27 18:32:51

如何存储过程插入到表中(用户定义类型(并传递给 c#

表结构:

CREATE TABLE [dbo].[RegisterChoiceUserInitial](
    [RegisterChoiceUserInitialID] [int] IDENTITY(1,1) NOT NULL,
    [UserId] [uniqueidentifier] NOT NULL,
    [RegisterChoiceUserInitialJob] [nvarchar](50) NULL,
    [RegisterChoiceUserInitialOrganization] [nvarchar](50) NULL,
    [RegisterChoiceUserInitialUnit] [nvarchar](50) NULL,
    [RegisterChoiceUserInitialMembershipType] [nvarchar](50) NULL,
    [RegisterChoiceUserInitialStart] [nvarchar](10) NULL,
    [RegisterChoiceUserInitialEnd] [nvarchar](10) NULL,
 CONSTRAINT [PK_RegisterChoiceUserInitial] PRIMARY KEY CLUSTERED 
(
    [RegisterChoiceUserInitialID] ASC
)

用户定义类型:

CREATE TYPE [dbo].[TableTypeInitial] AS TABLE(
    [ID] [int] NULL,
    [InitialJob] [nvarchar](50) NULL,
    [InitialOrganization] [nvarchar](50) NULL,
    [InitialUnit] [nvarchar](50) NULL,
    [InitialMembershipType] [nvarchar](50) NULL,
    [InitialMembershipStart] [nvarchar](10) NULL,
    [InitialMembershipEnd] [nvarchar](10) NULL
)

如何从存储过程插入到表(用户定义类型)并传递给 c#

你应该为你的类型进行序列化/反序列化,并将序列化对象的字符串写入 SQL,然后当你需要获取它时,你从表中读取字符串并将其反序列化为你的类型。

编辑

关于序列化,你可以在这里阅读 csharp-tutorial-serialize-objects-to-afile 他们使用序列化到文件,但将其转换为字符串并不难

无法将数据表作为输出参数返回。将表结果从 xp 返回到 c# 的唯一方法是使用 xml 参数或按以下方式返回。

SQL 脚本:

create procedure sp_returnTable
    body of procedure
    **select * from RegisterChoiceUserInitial**
end

示例 C# 代码:

   string connString = "<your connection string>";
    string sql = "name of your sp";
SqlConnection conn = new SqlConnection(connString);
try {
   SqlDataAdapter da = new SqlDataAdapter();
   da.SelectCommand = new SqlCommand(sql, conn);
   da.SelectCommand.CommandType = CommandType.StoredProcedure;
   DataSet ds = new DataSet();   
   da.Fill(ds, "result_name");
   DataTable dt = ds.Tables["result_name"];
   foreach (DataRow row in dt.Rows) {
               //manipulate your data
   }
} catch(Exception e) {
   Console.WriteLine("Error: " + e);
} finally {
   conn.Close();
}