这几天在写一个LoraWAN的项目的后台框架,到了添加数据阶段,有一个主键列deveui,明明赋值了而且参数@deveui的value也有值,可是语句执行的时候报 "Column 'deveui' cannot be null"。各种搜索找不到答案,在csdn论坛一文章上找到答案(http://bbs.csdn.net/topics/390288156)。谢谢!自己解决问题的感觉好极了。
错误的写法:
public void Add()
{
StringBuilder strSql=new StringBuilder();
strSql.Append("insert into [node] (");
strSql.Append("deveui,appeui,groupaddress3)");
strSql.Append(" values (");
strSql.Append("@deveui,@appeui,@groupaddress3)");
MySqlParameter[] parameters = {
new MySqlParameter("@deveui", MySqlDbType.VarChar,16),
new MySqlParameter("@appeui", MySqlDbType.VarChar,16),
new MySqlParameter("@groupaddress3", MySqlDbType.VarChar,8)};
parameters[0].Value = deveui;
parameters[1].Value = appeui;
parameters[20].Value = groupaddress3;
DbHelperMySQL.ExecuteSql(strSql.ToString(),parameters);
}
正确的写法:
public bool Add(node model)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("insert into node(");
strSql.Append("deveui,devnonce,groupaddress3");
strSql.Append(") values (");
strSql.Append("?deveui,?devnonce,?groupaddress3");
strSql.Append(") ");
MySqlParameter[] parameters = {
new MySqlParameter("?deveui", MySqlDbType.VarChar,16) ,
new MySqlParameter("?devnonce", MySqlDbType.VarChar,6) ,
new MySqlParameter("?groupaddress3", MySqlDbType.VarChar,8)
};
在Access、MySQL、Oracle数据库,那么对应的参数化SQL语句及参数分别如下:
数据库 | Access | MySQL | Oracle |
SQL语句 | select * from UserInfo where sex=? and age>? | select * from UserInfo where sex=?sex and age>?age | select * from UserInfo where sex=:sex and age>:age |
参数 | OleDbParameter | MySqlParameter | OracleParameter |
实例化参数 | OleDbParameter p=new OleDbParameter(“?”, OleDbType. Boolean); | MySqlParameter p=new MySqlParameter(“?sex”, MySqlDbType.Bit); | OracleParameter p=new OracleParameter(“:sex”, OracleType.Byte); |
赋值 | p.Value=true; | p.Value=1; | p.Value=1; |