2009-11-14 122 views
2

我想要基本DataGridView插入新行到表中。该表有一个自动增加主键(身份1,1),我有这个问题。DataGridView插入主键

第一个问题是DataGridView填充的DataSet抱怨行中的主键为空(我隐藏了DataGridView的主键字段)。

当我禁用约束检查或修改DataSet忽略主键为null时,此问题消失。

接下来的问题是SQL Server抱怨试图将数值插入到主键字段中的DataSet。当DataSet指定主键的值时,它不喜欢它。

我对使用C#很陌生,以前从未使用过DataGrid。

回答

1

问题是当我更改数据集中元素的属性时,数据集中的查询未被更新。我所要做的就是重新配置数据集。

0

至于你的PRIMARY 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) 

现在,尽可能的代码去,听起来就像你需要创建一个全局的DataAdapter并重用它用于你的数据库后端连接。我会假设你正在使用SQL。我没有看到你的代码,但是你不应该在你的INSERT或UPDATE命令中引用你的主键,因为我假设你的PRIMARY KEY是自动递增的而不是NULL。首先创建一个带有SelectCommand,InsertCommand,UpdateCommand和DeleteCommand的DataAdapter。下面的例子只显示了SelectCommand,但是更新/插入/删除命令都是一样的,你只需要使用正确的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; 
    .... 
}