为什么使用 C# 向 MySQL 插入数据时出现'Person Column Cannot Be Null”错误?

Barbara Streisand
发布: 2024-11-09 08:00:03
原创
342 人浏览过

Why Am I Getting a

使用 MySQL INSERT 参数的 C#

在 MySQL INSERT 语句中使用参数是维护数据完整性和防止 SQL 注入攻击的关键实践。但是,您在代码中遇到了问题,我们将随时帮助您解决这些问题。

原始问题:

在您的初始代码中,您尝试使用以下参数执行 INSERT 语句:

comm.Parameters.Add("@person", "Myname");
comm.Parameters.Add("@address", "Myaddress");
登录后复制

但是,错误消息“Person 列不能为空”表示您错过了为 person 参数设置值的情况。

解决方案:

要解决此问题,需要为参数赋值:

comm.Parameters.Add("@person", MySqlDbType.VarChar).Value = "Myname";
comm.Parameters.Add("@address", MySqlDbType.VarChar).Value = "Myaddress";
登录后复制

SQL 注入漏洞:

您还提到,在 INSERT 语句中使用文字字符串(例如“INSERT INTO room(person,address) VALUES('Myname', 'Myaddress')”)不会产生错误。然而,这种做法很容易受到 SQL 注入攻击,恶意用户可以操纵输入来执行任意 SQL 命令。

替代解决方案:

相反,您可以使用AddWithValue 方法,自动处理参数化并防止 SQL 注入:

comm.Parameters.AddWithValue("@person", "Myname");
comm.Parameters.AddWithValue("@address", "Myaddress");
登录后复制

使用问号:

另一种选择是使用问号作为参数的占位符,例如:

comm.CommandText = "INSERT INTO room(person,address) VALUES(?person, ?address)";
comm.Parameters.Add("?person", "Myname");
comm.Parameters.Add("?address", "Myaddress");
登录后复制

确保使用 MySqlDbType 枚举为每个参数指定 MySQL 数据类型。

基于索引的参数:

您尝试使用基于索引的参数(例如 cmd.Parameters.Add("person", MySqlDbType.VarChar).Value = a;)无效。基于索引的方法适用于存储过程,而不是参数化查询。

已解决的代码:

最终,您的代码已通过使用以下方法得到解决:

cmd.CommandText = "INSERT INTO room(person,address) VALUES(?person,?address)";
cmd.Parameters.Add("?person", MySqlDbType.VarChar).Value = "myname";
cmd.Parameters.Add("?address", MySqlDbType.VarChar).Value = "myaddress";
cmd.ExecuteNonQuery();
登录后复制

此代码成功执行 INSERT 语句,同时防止 SQL 注入。

以上是为什么使用 C# 向 MySQL 插入数据时出现'Person Column Cannot Be Null”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板