在数据库中插入空值

时间:2013-05-21 17:02:22

标签: c# mysql .net

我在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();

3 个答案:

答案 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进行比较来验证这一点。