在数据库中插入空值
本文关键字:空值 插入 数据库 | 更新日期: 2023-09-27 18:14:34
我在MySQL Workbench中有一个数据库,其中包含(姓名,姓氏,年龄,地址等)和一个windows桌面应用程序(窗体),在visual studio中使用c#,您可以在其中插入,搜索和更新。当我从表单中插入数据,我留下一些字段空,他们在数据库中保存为空白,我希望他们被保存为空。有办法实现这一点吗?
下面是插入按钮代码:
conn = openconnection.GetConn();
MySqlCommand cmd = new MySqlCommand("INSERT INTO table_name (name,lastname,address, etc...) VALUES (' " + name_textbox.Text + " ',' " + lastname_textbox.Text + " ' etc... );", conn);
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
conn.Close();
非常感谢,它工作得很好,但我有一个问题与空格的单词,如:(父亲的名字,母亲的名字,等)。当我在name处插入值时,它很好,但当我在父名或母名处插入值时,它是空的。我认为这是因为单词之间的空格。
MySqlCommand cmd = new MySqlCommand("INSERT INTO table_name (name,`father name`,`mother name`, etc... VALUES (@name,@`father name`,@`mother name`,etc...);", conn);
cmd.Parameters.AddWithValue("@name", name_textbox.Text.NullString());
cmd.Parameters.AddWithValue("@`father name`", father_name_textbox.Text.NullString());
cmd.Parameters.AddWithValue("@`mother name`", mother_name_textbox.Text.NullString());
cmd.ExecuteNonQuery();
一种方法是自己简单地进行解释:
string.IsNullOrEmpty(name_textbox.Text) ? null : string.Format("'{0}'", name_textbox.Text);
但是,我想给你另一个选择:
using (MySqlConnection conn = openconnection.GetConn())
{
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO table_name (name,lastname,address) VALUES (@name,@lastname,@address);", conn);
{
cmd.Parameters.AddWithValue("@name", name_textbox.Text.NullString());
cmd.Parameters.AddWithValue("@lastname", lastname_textbox.Text.NullString());
cmd.Parameters.AddWithValue("@address", address_textbox.Text.NullString());
cmd.ExecuteNonQuery();
}
}
namespace System
{
public static class StringExtensions
{
public static string NullString(this string s)
{
return string.IsNullOrEmpty(s) ? null : s;
}
}
}
使用此解决方案,您将正确处理连接和命令对象,但您也可以将字符串简化为null
进程和利用准备好的查询使过程更简单和更安全,因为它不开放SQL注入。
注意:静态类应该放在它自己的.cs
文件中。
我喜欢用这个漂亮的函数来测试/插入DBNull.Value
。
public static object ToDBNull(object value)
{
if (null != value)
return value;
return DBNull.Value;
}
在其他地方有用,但对你的情况:
MySqlCommand cmd = new MySqlCommand("INSERT INTO table_name (name,lastname,address, etc...)" +
"VALUES (' " + ToDBNull(name_textbox.Text) + " ',' " + ToDBNull(lastname_textbox.Text) + " ' etc... );", conn)
此外,您应该考虑SQL注入攻击的漏洞,并考虑参数化SQL命令。
虽然这些列在数据库中显示为空白,但它们实际上是空的。您可以通过读取c#中的这些字段并将其与System.DBNull进行比较来验证这一点。