【问题标题】:How insert into table(User-defined type) from Stored procedure and passing to c#如何从存储过程插入表(用户定义类型)并传递给c#
【发布时间】:2012-05-02 13:57:40
【问题描述】:

如何从存储过程插入表(用户定义类型)并传递给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 sql-server-2008 c#-4.0


    【解决方案1】:

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

    编辑

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

    【讨论】:

      【解决方案2】:

      无法将数据表作为输出参数返回。将表格结果从 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();
      }
      

      【讨论】:

        猜你喜欢
        • 2010-11-02
        • 1970-01-01
        • 2018-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-24
        相关资源
        最近更新 更多