【问题标题】:insert Empty Textbox value in SQL Server在 SQL Server 中插入空文本框值
【发布时间】:2013-05-07 13:30:10
【问题描述】:

我有一些可以有空值的文本框。当我试图在插入命令中插入该 textbox.text 时,它会在 sql 中显示错误。我想要文本框为空时的自动检查,它将在 sql server 2008 R2 的数据库中插入 null。我正在使用正常的插入命令,我不想使用过程(太笨拙)。 请任何人帮助我。

提前致谢。

【问题讨论】:

  • 表结构是什么,数据类型是什么,使其可以为空字段。

标签: c# sql-server-2008


【解决方案1】:

不太确定您的代码,但应该是这样的:

using (SqlConnection conn = new SqlConnection("ConnectionString"))
using (SqlCommand cmd = new SqlCommand())
{
    cmd.CommandText = "INSERT into yourTable(ID, Col1, Col2) VALUES (@ID, @Col1, @Col2);";
    cmd.Connection = conn;
    conn.Open();
    cmd.Parameters.AddWithValue("@ID", yourID);
    cmd.Parameters.AddWithValue("@Col1", string.IsNullOrWhiteSpace(textBox1.Text) ? 
                                          DBNull.Value: textBox1.Text);
    cmd.Parameters.AddWithValue("@Col2", string.IsNullOrWhiteSpace(textBox2.Text) ?
                                          DBNull.Value : textBox2.Text);
    cmd.ExecuteNonQuery();
}

您可以使用 string.IsNullOrWhiteSpace 检查空字符串,并相应地传递 null。如果您想将空格视为有效值,请使用string.IsNullOrEmpty()

【讨论】:

  • 由空白字符组成的字符串(例如,一个空格)如果不为空,但您将其视为空。我不知道这是否是 OP 想要的,但这不是 OP 要求的,这只是 string.IsNullOfEmpty
  • @hvd,我只能猜测 OP 会将空格视为空,但你是对的,我应该在我的答案中添加它。
  • 是的,插入 null 预编辑不是正确的选择 - DBNull.Value 是关键。否则从一开始就非常清晰,解释性的代码。
  • @J0e3gan,是的,使用 ORM 框架,我习惯了 null 而不是 DBNull.Value :)
  • 很公平。在这种情况下,我们正在粗略处理它。 :)
【解决方案2】:

如果您使用直接插入查询

"insert into table_name (column1,column2,column3) values("+column1value+","+column2value+","+textbox.Text.Trim()!=""?textbox.Text.Trim():DBNull.Value+")";

即使您使用参数化查询,也可以使用相同的表达式

textbox.Text.Trim()!=""?textbox.Text.Trim():DBNull.Value

【讨论】:

  • 这个例子是SQL注入的候选。我总是建议使用参数,而不是通过注入用户提供的文本来直接构建 sql 语句。至少,您应该确保您正在转义 SQL 字符。
  • 对不起,你是对的。参数化查询总是更好。不要使用直接查询,会导致sql注入。谢谢你提醒我。
【解决方案3】:

试试这样的:

using (SqlConnection conn = new SqlConnecction(connStr))
{
    conn.Open();
    string qry = "INSERT TargetTable (TargetColumn) VALUES (@TextValue)";
    using (SqlCommand cmd = new SqlCommand(qry, conn))
    {
        cmd.Parameters.Add(new SqlParameter("@TextValue", String.IsNullOrEmptyOrWhiteSpace(textBox.Text) ? DBNull.Value : textBox.Text));
        try
        {
            cmd.ExecuteNonQuery();
        }
        catch (SqlException sex)
        {
            // whatever
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2023-03-17
    相关资源
    最近更新 更多