访问db外键问题

时间:2015-01-14 11:37:45

标签: c# winforms ms-access datagridview

您好我有使用MS Access数据库的桌面应用程序。一切都很好,直到在我的桌子上添加了一个外键。我有2个表,第一个

sections

section_id | name
1          | Section1
2          | Section2

Details

details_id | Name | section_id
1          |Name1 |1
2          |Name2 |2
3          |Name3 |1
section表中的

section_id是Details表的外键。

我有一个网格,我在其中显示详细信息表中的所有数据,并允许用户编辑记录。对于section_id,我使用的是一个组合框,它允许用户只从当前的数据中选择Section表。

gridview允许我添加一行但更新会抛出错误

  

您无法添加或更改记录,因为表格'部分需要相关记录。

是的,那会是吗?我只允许用户在section表的section_id列的details表中输入预定义值。

修改 我注意到一件事......我曾使用参数化查询进行更新。这是错误的。我用'"将其更改为普通查询,查询开始正常运行。知道为什么吗?

EDIT2

这是我的更新代码:

//query = "UPDATE Details SET Name='" + lblName + "', section_id="+section_id;
//query += " WHERE details_id ="+details_id ;

query = "UPDATE Details SET Name =@Name, section_id=@section_id WHERE details_id = @details_id ";

cmd2.CommandText = query;
cmd2.Parameters.AddWithValue("@Name", lblName );
cmd2.Parameters.AddWithValue("@details_id ", details_id );
cmd2.Parameters.AddWithValue("@section_id", section_id);
//cmd2.Parameters.Add("@section_id", OleDbType.Integer, 12).Value = Convert.ToInt32(section_id);                              
cmd2.Connection = con;
cmd2.ExecuteNonQuery();

我尝试通过向参数添加数据类型来建议@GordThompson。但仍然是同样的问题。

另一次更新 我在不使用参数化查询的情况下运行代码。我注意到一种奇怪的行为。我在Details表中添加了section_id,表示section_id = 2,然后从Sections表中删除了section_id = 2。我添加了section_id的Details表中的数据也消失了。这是Ms Access的典型行为吗?

0 个答案:

没有答案