У меня есть DB таблицы (которая пуста в данном примере)Получение сообщения об ошибке в SqlDataAdapter.Update()
create table words
(
id int not null,
word nvarchar(50) not null
)
и DataGridView
, который я заполняю так:
private SqlConnection _conn;
private SqlDataAdapter _wordsAdapter;
private DataTable _wordsDataTable = new DataTable();
private DataGridView _tblWords;
private void FillWords()
{
_wordsAdapter = new SqlDataAdapter(new SqlCommand("select id, word from words", _conn));
_wordsAdapter.Fill(_wordsDataTable);
DataGridViewColumn column = new DataGridViewTextBoxColumn();
column.DataPropertyName = "id";
column.Name = "id";
_tblWords.Columns.Add(column);
column = new DataGridViewTextBoxColumn();
column.DataPropertyName = "word";
column.Name = "word";
_tblWords.Columns.Add(column);
_tblWords.DataSource = _wordsDataTable;
}
private void Update()
{
_wordsAdapter.InsertCommand = new SqlCommand("insert into words (id, word) values (@id, @word)", _conn);
SqlParameter p = _wordsAdapter.InsertCommand.Parameters.Add("@id", SqlDbType.Int);
p.SourceColumn = "id";
p.SourceVersion = DataRowVersion.Original;
p = _wordsAdapter.InsertCommand.Parameters.Add("@word", SqlDbType.NVarChar);
p.SourceColumn = "word";
p.SourceVersion = DataRowVersion.Original;
_wordsAdapter.Update(_wordsDataTable);
}
Затем я заполняю одну строку _ tblWords с некоторыми значениями и звоните Update()
. И получить это сообщение:
Exception брошенную: 'System.Data.SqlClient.SqlException' в System.Data.dll
Дополнительная информация: Не удается вставить значение NULL в столбец 'идентификатор', таблица «DB .MDF.dbo.words'; столбец не допускает нулей. INSERT не работает.
Почему значение 'id' не выбрано из DataTable? Что я делаю не так?
UPDATE: После вставки этого кода в начале функции Update(), все работает отлично:
private void Update()
{
_wordsDataTable.Rows.Clear();
_wordsDataTable.Rows.Add(0, "xxx");
...
Таким образом, проблема возникает только тогда, когда я заполняю DataTable через DataGridView. Зачем?!
Вы принимаете данные из DataGridView и вставить его в таблицу. Идентификационный столбец должен быть первичным ключом или столбцом идентификации, и, следовательно, он не позволяет вам вставлять дублирующее значение. Если вы хотите обновить столбец слов в таблице, используйте инструкцию UPDATE. –
Стол пуст, поэтому в этом конкретном случае строка INSERTED. Нет дубликатов, потому что вставленная строка является первой строкой в таблице. Но я все еще получаю ошибку. – cesarito
Я пытаюсь запустить ваш код. Что такое '_cb'? – dev1998