VS2005 / VS2008 конструктор DataSet, вставьте строку в таблицу с автоматически созданным столбцом guid - PullRequest
3 голосов
/ 30 апреля 2009

У меня есть строго типизированная таблица данных, созданная с помощью конструктора наборов данных VS2005 / VS2008.

В таблице есть столбец первичного ключа, представляющий собой guid, который заполняется сервером SQL. Проблема заключается в том, что я хочу добавить строку (или несколько строк) в мою таблицу данных, а затем вызвать метод DataAdapter.Update (передавая таблицу данных). Когда вызывается DataAdapter.Update , я получаю исключение SQL о том, что я не могу вставить NULL в столбец первичного ключа.

Как мне сообщить конструктору, что это автоматически сгенерированный столбец, и я не хочу указывать значение для новых строк? Я просто хочу значение, сгенерированное SQL.

Я что-то здесь упускаю или это ограничение дизайнера DataSet?

Я знаю, как добиться этого с помощью LINQ to SQL, но, к сожалению, у меня нет его в распоряжении для этого проекта.

Ответы [ 2 ]

2 голосов
/ 02 мая 2009

Возможно один из них:

  • Если вам не нужен столбец в вашем DataSet для вашего приложения, удалите его.
  • Если вы хотите получить столбец, но не хотите задавать ему значение, измените его, чтобы разрешить DBNull.
  • Вы всегда можете отключить принудительное применение ограничений (возможно, это плохая идея): DataSet.EnforceConstraints = false
  • Вы можете заполнить столбец суррогатным ключом, который не отправляется в БД.

Для первых двух опций, если вы хотите, чтобы удобство позволяло конструктору синхронизировать вашу структуру с вашей базой данных, тогда вы можете удалить столбец или разрешить нулевое значение программно, возможно, прямо рядом с комментарием "// HACK:" объясняя почему.

0 голосов
/ 30 апреля 2009

Вероятно, вы используете DEFAULT NEWID () в определении таблицы SQL Server, поэтому проблема может заключаться в том, что конструктор набора данных не видит этот столбец как сгенерированный автоматически.

Может быть, создание guid в коде вашего приложения может быть решением? Если нет, то вы можете установить значение по умолчанию в вашем наборе данных, но тогда вам, вероятно, придется также изменить операторы DataAdapter Insert / Update, чтобы это значение по умолчанию не вставлялось в таблицу Sql Server.

Может быть и другое решение, о котором я не знаю ...

...