由于 Null ERROR [HY000] [MySQL][ODBC 3.51,插入失败

Insert failed due to Null ERROR [HY000] [MySQL][ODBC 3.51

我的问题:

这个查询有什么问题,这让我很困惑,谁能给我建议解决方案:我将查询用作:

Dim constr As String = "Dsn=check;database=db;description=check;option=0;port=0;server=localhost;uid=root"
Dim con As New OdbcConnection(constr)
Dim mysql As String = "insert into parameter(col3,col1,col2) values(@val3,@val1,@val2)"
Dim cmd As New OdbcCommand
With cmd
    .CommandType = CommandType.Text
    .CommandText = mysql
    .Connection = con
    .Parameters.Add(New OdbcParameter("@val1", "C005"))
    .Parameters.Add(New OdbcParameter("@val2", "C006"))
    .Parameters.Add(New OdbcParameter("@val3", 55))
End With
con.Open()
MsgBox(cmd.ExecuteNonQuery()) '<--- this line giving error as given below
con.Close() 

ERROR [HY000] [MySQL][ODBC 3.51 Driver][mysqld-5.0.37-community-nt-log]Column 'col3' cannot be null

但我正在为该参数添加值 .Parameters.Add(New OdbcParameter("@val3", 55)) 那么为什么会出现此错误?

col3 是我的 table 的主键。因此,如果我为主键字段设置自动增量,然后为 col1col2 赋值,那么它会将 NULL 值插入 table.

如果我像下面这样使用:会工作正常使用参数化查询时出现问题,这是我第一次使用参数化查询

Dim mysql As String = "insert into parameter(col3,col1,col2) values(55,'C005','C006')"
    Dim cmd As New OdbcCommand
    With cmd
        .CommandType = CommandType.Text
        .CommandText = mysql
        .Connection = con
    End With
    con.Open()
    MsgBox(cmd.ExecuteNonQuery())
    con.Close 

我正在使用 odbc 驱动程序 3.5visual studio 2010

正在使用 table 的结构:

CREATE TABLE  `db`.`parameter` (
  `col3` int(11) NOT NULL default '0',
  `col1` text,
  `col2` text,
  PRIMARY KEY  (`col3`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

您的 table 定义有误。像这样定义主 auto_increment 键

CREATE TABLE  `parameter` (
  `col3` int NOT NULL primary key auto_increment,
  `col1` text,
  `col2` text
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

那么你可以使用这个查询

insert into parameter(col1,col2) values(@val1,@val2)

主键由数据库生成。

SQLFiddle demo

也使用?作为参数占位符

insert into parameter(col1,col2) values(?,?)