由于 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 的主键。因此,如果我为主键字段设置自动增量,然后为 col1
和 col2
赋值,那么它会将 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.5 和 visual 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(?,?)
我的问题:
这个查询有什么问题,这让我很困惑,谁能给我建议解决方案:我将查询用作:
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 的主键。因此,如果我为主键字段设置自动增量,然后为 col1
和 col2
赋值,那么它会将 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.5 和 visual 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(?,?)