Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Странность работы SqlBulkCopy при записи в таблицу с identity column / 4 сообщений из 4, страница 1 из 1
17.10.2008, 07:23
    #35599828
Странность работы SqlBulkCopy при записи в таблицу с identity column
Странность следующая. Имеем таблицу:
Код: plaintext
1.
2.
3.
create table MyTable (
n int identity( 1 , 1 ) primary key,
name varchar( 10 ))
Имеем код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
static void doSome()
{
    DataTable dt = new DataTable();
    dt.Columns.Add(new DataColumn("name", typeof (string)));
    for (int i = 0; i < 10;i++ )
    {
        DataRow dr = dt.NewRow();
        dr[0] = Convert.ToChar(65 + i).ToString();
        dt.Rows.Add(dr);
    }
    using (SqlConnection cnn = new SqlConnection(Settings.Default.MyConnectString))
    {
        cnn.Open();
        using(SqlBulkCopy bulk = new SqlBulkCopy(cnn,SqlBulkCopyOptions.Default,null))
        {
            bulk.DestinationTableName = "MyTable";
            bulk.WriteToServer(dt);
        }
    }
    Console.WriteLine("writed");
    Console.ReadKey();
}
Т.к. поле n таблицы - identity, то мы не можем явно задавать в insert его значение, поэтому в SqlBulkCopy передаем только значения для name. Код отрабатывает нормально, никаких эксепшенов. После отработки делаем селект из MyTable - 0 записей (хотя, по идее, должно быть 10). Есть, конечно, вариант самому нумеровать записи (т.е. в DataTable внести еще DataColumn n), и потом задать SqlBulkCopyOptions.KeepIdentity - но мне нужно, чтобы при bulk copy сервер сам проставлял identity values. В чем причина такого поведения, и как это обойти?
...
Рейтинг: 0 / 0
17.10.2008, 08:13
    #35599864
Ъй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность работы SqlBulkCopy при записи в таблицу с identity column
Проблема решена. Если в приведенном примере для SqlBulkCopy задать
Код: plaintext
bulk.ColumnMappings.Add(new SqlBulkCopyColumnMapping(0, 1));
то всё работает так, как надо. Меня просто сбило с толку то, что если мы копируем таблицы as is, то SqlBulkCopy сам разбирает маппинг без явного его задания - но здесь не тот случай.
...
Рейтинг: 0 / 0
17.10.2008, 08:15
    #35599865
Ъй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность работы SqlBulkCopy при записи в таблицу с identity column
Упс..
...
Рейтинг: 0 / 0
17.10.2008, 09:36
    #35599981
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странность работы SqlBulkCopy при записи в таблицу с identity column
ЪйУпс..


по крайней мере чувство юмора Сергей не потерял
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Странность работы SqlBulkCopy при записи в таблицу с identity column / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]