我正在尝试使用基本的DataGridView将新行插入表中。该表有一个自动递增的主键(标识1,1),我有两个问题。
第一个问题是DataGridView填充的DataSet抱怨行中的主键为空(我隐藏了DataGridView中的主键字段)。
当我禁用约束检查或修改DataSet以忽略主键为null时,此问题消失。
下一个问题是SQL Server抱怨DataSet试图将值插入主键字段。当DataSet指定主键的值时,它不喜欢它。
我是使用C#的新手,我之前从未使用过DataGrid。
答案 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;
....
}