我在MySQL Workbench中有一个数据库,其中包含(名称,姓氏,年龄,地址等)字段和带有c#的visual studio中的Windows桌面应用程序(表单),您可以在其中插入,搜索和更新。 当我从表单中插入数据并将一些字段留空时,它们将作为空白保存在数据库中,我希望它们保存为null。 有没有办法实现这一目标?
这是并插入按钮代码:
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();
非常感谢,它的工作正常,但我对带空格的单词有疑问,例如:(父亲姓名,母亲姓名等)。当我在名称处插入一个值时,它很好但是当我在父名或母名处插入一个值时,它为空。我认为这是因为文字之间的空间。
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();
答案 0 :(得分:9)
一种方法是单独进行解释:
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
文件中。
答案 1 :(得分:1)
我喜欢使用这个漂亮的函数来测试/插入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命令。
答案 2 :(得分:-1)
虽然列在数据库中显示为空白,但它们实际上是空的。您可以通过在C#中读取这些字段并将其与System.DBNull进行比较来验证这一点。