在数据库中插入空值

本文关键字:空值 插入 数据库 | 更新日期: 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进行比较来验证这一点。