2011-04-11 49 views
1

我正在使用c#中的sql批量複製在Excel中填充值。如何在sql批量複製中插入一個具有特定值的列

DataTable dt = new DataTable(); 

string line = null; 
int i = 0; 

using (StreamReader sr = File.OpenText(@"c:\temp\table1.csv")) 
{ 
     while ((line = sr.ReadLine()) != null) 
     { 
      string[] data = line.Split(','); 
      if (data.Length > 0) 
      { 
        if (i == 0) 
        { 
        foreach (var item in data) 
        { 
         dt.Columns.Add(new DataColumn()); 
        } 
        i++; 
      } 
      DataRow row = dt.NewRow(); 
      row.ItemArray = data; 
      dt.Rows.Add(row); 
      } 
     } 
} 


using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConsoleApplication3.Properties.Settings.daasConnectionString"].ConnectionString)) 
{ 
     cn.Open(); 
     using (SqlBulkCopy copy = new SqlBulkCopy(cn)) 
     { 
      copy.ColumnMappings.Add(0, 0); 
      copy.ColumnMappings.Add(1, 1); 
      copy.ColumnMappings.Add(2, 2); 
      copy.ColumnMappings.Add(3, 3); 
      copy.ColumnMappings.Add(4, 4); 
      copy.DestinationTableName = "Censis"; 
      copy.WriteToServer(dt); 
     } 
} 

在上面的代碼中,我將記錄從excel插入表中。但是,我在Censis表中還有一列「ProcessID」。對於每次運行,我需要生成一個GUID並用此填充此列。

任何人可以幫助我如何填充ProcessID列,當我做如上所述的大批量複製與生成的GUID爲該運行的所有行?

回答

0

當你做你插入到數據庫使用的功能newsequentialid

+0

你能增加更多細節嗎? – guiomie 2013-06-19 18:09:02

-1

感謝JonH。但是,我爲我的問題找到了答案。我可以使用這樣的東西。我可以將一個默認值的新DataColumn添加到我用於批量複製的數據表中。

DataTable dt = new DataTable(); 

string line = null; 
int i = 0; 

using (StreamReader sr = File.OpenText(@"c:\temp\table1.csv")) 
{ 
     while ((line = sr.ReadLine()) != null) 
     { 
      string[] data = line.Split(','); 
      if (data.Length > 0) 
      { 
        if (i == 0) 
        { 
        foreach (var item in data) 
        { 
         dt.Columns.Add(new DataColumn()); 
        } 
        i++; 
      } 
      DataRow row = dt.NewRow(); 
      row.ItemArray = data; 
      dt.Rows.Add(row); 
      } 
     } 

     DataColumn col = new DataColumn("BatchId", typeof(System.Guid)); 
     col.DefaultValue = Guid.NewGuid(); 
     dt.Columns.Add(col); 
} 


using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConsoleApplication3.Properties.Settings.daasConnectionString"].ConnectionString)) 
{ 
     cn.Open(); 
     using (SqlBulkCopy copy = new SqlBulkCopy(cn)) 
     { 
      copy.ColumnMappings.Add(0, 0); 
      copy.ColumnMappings.Add(1, 1); 
      copy.ColumnMappings.Add(2, 2); 
      copy.ColumnMappings.Add(3, 3); 
      copy.ColumnMappings.Add(4, 4); 
      copy.DestinationTableName = "Censis"; 
      copy.WriteToServer(dt); 
     } 
} 
+1

使用.net生成一個GUID是極不推薦的。這會導致數據和碎片之間的差距。建議使用'newsequentialid()'。 – JonH 2011-04-12 03:34:53

相關問題