none
sqlserver 数据批量插入 RRS feed

  • 问题

  • C# 程序定义表

     DataTable newdt = new DataTable();
                    newdt.Columns.AddRange(new DataColumn[] { 
                                           new DataColumn("Batch_no",typeof(string)),
                                           new DataColumn("Partner",typeof(string)),
                                           new DataColumn("CTime",typeof(string)),
                                           new DataColumn("Status",typeof(string)),
                                           new DataColumn("U_MobilePhoneNum",typeof(string)),
                                           new DataColumn("U_ALPayNum",typeof(string)),
                                           new DataColumn("U_ALPayName",typeof(string)),
                                           new DataColumn("AppllAmount",typeof(string)),
                                           new DataColumn("F_name",typeof(string))
                                            });

    表结构如上。

    SQLServer 中自定义一个表类型结构和上相同,然后再数据中执行存储

    --INSERT INTO dbo.OrdFlow
    -- (  [Batch_no] ,
    -- [U_MobilePhoneNum]  ,
    -- [U_ALPayNum] ,
    -- [U_ALPayName]  ,
    -- [AppllAmount]  ,
    -- [Partner]  ,
    -- [F_name]  ,
    -- [CTime] ,
    -- [Status]
    -- )

    --      select Batch_no ,
    -- [U_MobilePhoneNum]  ,
    -- [U_ALPayNum] ,
    -- [U_ALPayName]  ,
    -- [AppllAmount]  ,
    -- [Partner]  ,
    -- [F_name]  ,
    -- [CTime] ,
    -- [Status] from @dt

    大家可以看到程序中定义的表和数据库中 的表字段相同,只是字段顺序不同,所以我在存储中插入时用字段显式来进行插入操作,问题出现了,数据是可以插入的,但是它的插入数据只是按照程序的表结构字段顺序进行插入,无论我怎么在数据库存储中调整字段顺序就是不能按照字段顺序插入。

    如上图,我程序定义表A结构是(a,b,c),自定义表变量也是(a,b,c),数据库真是表可能是B(c,b,a),于是我在存储中插入时用命令将顺序调整为(

    insert into B(c,b,c) select c,b,a from @dt --@dt 为自定义表变量结构同A

    )请大家帮忙找出问题,或者说对C#的批量数据插入有更好的方法,sqlcopy、实体模型之类的就算了,拜托了。

    2014年4月18日 3:44

全部回复

  • 不明白,你查询出来的数据是根据你的表字段

    2014年4月18日 4:11
  • 除非你改变字段的顺序,在表设计器里改

    改的时候把sex字段拖到name上,然后点击保存,你再查询就会按照新的字段顺序出结果

    2014年4月18日 4:13
  • 您好,
    C#的DataTable栏位顺序 要跟 SQL 表值参数类型相同!!!

    您的运用情境是用一支存储过程统一在处理吗?

    如果您要改DataTable栏位顺序的话,可以用dataTable.Columns["yourfieldName"].SetOrdinal(0);

    dataTable.Columns["Qty"].SetOrdinal(0);
    dataTable.Columns["Unit"].SetOrdinal(1);


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/




    2014年4月18日 5:34