.NET应用程序无法解释的MySQL组合密钥问题

时间:2013-08-24 03:02:12

标签: c# mysql .net vb.net

我正在编写一个使用ODBC连接与MySQL数据库交互的.NET应用程序。我的应用程序将在启动时在数据库上创建数据库模式和表。但是,我在下面遇到了一个奇怪的无法解释的案例:

首先我的应用程序将创建下表

CREATE TABLE IF NOT EXISTS `sample` (
`item_ID` varchar(20) NOT NULL,
`item_No` int(11) NOT NULL,
`sample_col1` varchar(20) NOT NULL,
`sample_col2` varchar(20) NOT NULL,
PRIMARY KEY (`item_ID`, `item_No`)
) ENGINE=InnoDB;

使用

填充表格
INSERT INTO sample SET item_ID='abc', item_No=1, sample_col1='', sample_col2='';
INSERT INTO sample SET item_ID='abc', item_No=2, sample_col1='', sample_col2='';

然后我使用以下代码在.NET应用程序中执行SELECT查询:

Dim query As String
query = "SELECT item_ID, item_No, sample_col1, sample_col2 FROM sample"

Dim conn As New OdbcConnection("Driver={MySQL ODBC 5.1 Driver};Server=localhost; port=3306;Database=test; User=dbuser;Password=dbpassword;Option=3;")
Dim cmd As New OdbcDataAdapter(query, conn)
Dim dt As New DataTable
cmd.FillSchema(dt, SchemaType.Source)
cmd.Fill(dt)
conn.Close()

cmd.Fill(dt)行将抛出异常:“无法启用约束。一行或多行包含违反非null,唯一或外键约束的值”。

但是,如果我将表创建查询修改为:

CREATE TABLE IF NOT EXISTS `sample` (
`item_ID` varchar(20) NOT NULL,
`item_No` int(11) NOT NULL,
`sample_col1` varchar(20) NOT NULL,
`sample_col2` varchar(20) NOT NULL,
PRIMARY KEY (`item_No`,`item_ID`)  '--> Here Primary Key order is inverted
) ENGINE=InnoDB;

vb.net代码完美无缺。关于第二个创建查询的注意事项我颠倒了PRIMARY KEY创建的顺序。在第一个示例中,我首先放置item_ID,而在第二个示例中,我先放置item_No

有没有人知道为什么会这样?从第一个和第二个创建查询之间的MySQL数据库的角度来看也有什么不同吗?

任何输入将不胜感激。谢谢!

0 个答案:

没有答案