代码之家  ›  专栏  ›  技术社区  ›  epochwolf

DataGridView插入主键

  •  2
  • epochwolf  · 技术社区  · 15 年前

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

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

    当我禁用约束检查或修改数据集以忽略主键为空时,这个问题就消失了。

    下一个问题是SQL Server抱怨数据集试图向主键字段中插入值。它不喜欢数据集为主键指定值。

    我对使用C非常陌生,而且我以前从未使用过数据报。

    2 回复  |  直到 12 年前
        1
  •  1
  •   epochwolf    15 年前

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

        2
  •  0
  •   user195488    15 年前

    就您的主键问题而言,这就是我如何构造简单表的方法,它可以很好地进行插入、更新、选择和删除操作。

    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似乎需要创建一个全局数据适配器,并将其重新用于数据库后端连接。我假设您使用的是SQL。我没有看到您的代码,但是您不应该在insert或update命令中引用主键,因为我假定您的主键是自动递增的,而不是空的。首先使用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;
         ....
    }