【问题标题】:DataGridView inserts primary keyDataGridView 插入主键
【发布时间】:2009-11-14 21:13:50
【问题描述】:

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

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

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

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

我对使用 C# 非常陌生,之前从未使用过 DataGrid。

【问题讨论】:

    标签: c# datagridview


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      就您的 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,但 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;
           ....
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-17
        相关资源
        最近更新 更多