Как вставить столбец с определенным значением в sql массовом копировании - PullRequest
1 голос
/ 11 апреля 2011

Я заполняю таблицу значениями в Excel, используя sql массовое копирование в c #.

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 в таблицу.Но у меня есть еще один столбец "ProcessID" в таблице Censis.Для каждого запуска мне нужно генерировать GUID и заполнять этот столбец этим.

Может ли кто-нибудь помочь мне заполнить столбец ProcessID, когда я делаю массовое копирование, как описано выше, с созданным GUID для всех строкдля этого бега?

Ответы [ 2 ]

0 голосов
/ 11 апреля 2011

Спасибо, Джон. Но я нашел ответ на свою проблему. Я могу использовать что-то вроде этого. Я могу добавить новый 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);
      }
} 
0 голосов
/ 11 апреля 2011

Когда вы делаете вставку в базу данных, используйте функцию newsequentialid

...