DataGridView插入主键

时间:2009-11-14 21:13:51

标签: c# datagridview

我正在尝试使用基本的DataGridView将新行插入表中。该表有一个自动递增的主键(标识1,1),我有两个问题。

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

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

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

我是使用C#的新手,我之前从未使用过DataGrid。

2 个答案:

答案 0 :(得分:1)

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

答案 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是自动递增和NOT NULL。首先使用SelectCommand,InsertCommand,UpdateCommand和DeleteCommand创建DataAdapter。下面的示例仅显示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;
     ....
}