2009-11-14 4 views
2

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

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

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

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

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

ответ

1

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

0

Насколько ваша основная проблема KEY, это то, как я мои простые таблицы структурированы и она отлично работает с вставкой, обновлением, выбор и удалением

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) 

Теперь, насколько код идет , tt звучит так, как будто вам нужно создать глобальный DataAdapter и повторно использовать его для соединений с базой данных базы данных. Предполагаю, что вы используете SQL. Я не видел ваш код, но вы не должны ссылаться на свой первичный ключ в ваших командах INSERT или UPDATE, так как я предполагаю, что ваш PRIMARY KEY автоматически увеличивается и NOT NULL. Начните с создания DataAdapter с помощью 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; 
    .... 
} 
Смежные вопросы