DataGridView вставляет первичный ключ - PullRequest
2 голосов
/ 15 ноября 2009

Я пытаюсь получить базовый DataGridView для вставки новых строк в таблицу. Таблица имеет первичный ключ с автоинкрементом (Identity 1,1), и у меня есть две проблемы с этим.

Первая проблема - это набор данных, из которого заполняется DataGridView, который жалуется, что первичный ключ в строке является нулевым (я скрываю поле первичного ключа из DataGridView).

Эта проблема исчезает, когда я отключаю проверку ограничений или изменяю DataSet, чтобы игнорировать первичный ключ, являющийся нулевым.

Следующая проблема - SQL Server жалуется на то, что DataSet пытается вставить значение в поле первичного ключа. Не нравится, когда DataSet указывает значение для первичного ключа.

Я очень новичок в использовании C # и никогда раньше не использовал DataGrid.

Ответы [ 2 ]

1 голос
/ 18 ноября 2009

Проблема заключалась в том, что запросы в наборе данных не обновлялись, когда я изменял свойства элементов в наборе данных. Все, что мне нужно было сделать, это перенастроить набор данных.

0 голосов
/ 18 ноября 2009

Что касается вашей проблемы с ПЕРВИЧНЫМ КЛЮЧОМ, это то, как я структурировал свою простую таблицу, и она прекрасно работает со вставкой, обновлением, выбором и удалением

CREATE TABLE [dbo].[INVENTORY](
[id] [int] IDENTITY(1,1) NOT NULL,
[L1] [varchar](20) NOT NULL,
[L2] [varchar](20) NOT NULL,
[L3] [varchar](20) NOT NULL,
[L4] [varchar](12) NULL,
[L5] [varchar](4) NULL,
[L6] [datetime] NULL,
[L7] [bit] NOT NULL,
[L8] [bit] NOT NULL,
[L9] [varchar](4) NULL,
[L10] [varchar](4) NULL)

Теперь, что касается кода, кажется, что вам нужно создать глобальный адаптер данных и повторно использовать его для внутренних подключений базы данных. Я предполагаю, что вы используете SQL. Я не видел ваш код, но вы не должны ссылаться на ваш первичный ключ в ваших командах INSERT или UPDATE, так как я предполагаю, что ваш PRIMARY KEY является автоинкрементным, а НЕ NULL. Начните с создания адаптера данных с помощью команд SelectCommand, InsertCommand, UpdateCommand и DeleteCommand. В приведенном ниже примере показана только команда SelectCommand, но все команды Update / Insert / DeleteCommand работают одинаково, и вам просто нужно использовать правильный синтаксис команды SQL.

private void ReadDB()
{
   try
   {
       string connectionString = "server=(local)\\SQLEXPRESS;" +
             "Trusted_Connection=yes; database=INVENTORY";

       myConnection = new SqlConnection(connectionString);

       myConnection.Open();

       myDataSet = new DataSet();

       myDataSet.CaseSensitive = true;
       DataAdapter = new SqlDataAdapter();
       DataAdapter = CreateInventoryAdapter();
       DataAdapter.TableMappings.Add("Table", "INVENTORY");

       DataAdapter.Fill(myDataSet);
   } catch (Exception ex) { // Do Something }
}

private SqlDataAdapter CreateInventoryAdapter()
{
     SqlDataAdapter adapter = new SqlDataAdapter();
     ....
     command = new SqlCommand("SELECT * FROM INVENTORY", myConnection);
     adapter.SelectCommand = command;

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