Вопрос автоинкремента набора данных - PullRequest
0 голосов
/ 21 февраля 2012

У меня есть база данных SQL Server с несколькими таблицами. У одного из них есть «ID» (первичный ключ), «Имя» и другие столбцы, которые я не буду здесь упоминать для простоты. Столбец «ID» - это автоинкремент, уникальный, и когда я добавляю какую-то строку, используя «SQL Server Management Studio», столбец «ID» увеличивается должным образом. База данных старая, и текущее автоинкрементное значение равно 1244 или около того.

Теперь я создал проект C #, который использует набор данных TYPED для работы с данными из базы данных. Моя база данных начинается пустой, набор данных заполняется с помощью адаптеров таблиц, новые строки добавляются с помощью моей программы, но есть проблема, с которой я до сих пор не сталкивался: когда моя программа добавляет новую строку в набор данных, затем обновляет базу данных (используя адаптер таблицы), " Столбец ID "в моей базе данных получает правильное автоматически увеличенное число (1245,1246 и т. Д.), НО мой столбец" ID "в наборе данных получает" -1 "," -2 "вместо этого! В чем проблема? Как я могу сказать моему набору данных использовать автоинкрементное начальное число, заданное базой данных, вместо генерации собственных НЕГАТИВНЫХ (???) номеров первичных ключей?

EDIT: Я получаю и сравниваю строки, используя это:

dsNames.tbNamesRow[] TMP = basedataset.tbNames.Select() as dsNames.tbNamesRow[];
foreach (dsNames.tbNamesRow row in TMP)
{
    string Name = row.Name;
    bool Found = Name == Search;
    if (CompareDelegate != null)
        Found = CompareDelegate(Name, Search);
    if (Found)
    {
        int ID = row.ID;
        break;
    }
}

1 Ответ

2 голосов
/ 21 февраля 2012

Мой исходный комментарий был некорректным, я предположил, что вы извлекаете значение из базы данных, и в наборе данных THAT указаны неверные значения.

Способ, которым ADO.NET решает проблему предотвращения столкновений с отключенным набором данных,он назначает отрицательные значения столбца IDENTITY, потому что он не знал бы возможного положительного числа, которое НЕ является коллизией, поскольку он отключен.Эти (отрицательные) значения являются уникальными с точки зрения этой транзакции.

Когда вы пытаетесь зафиксировать свои изменения, механизм ADO.NET определяет правильный SQL для получения правильного результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...