【问题标题】:Don't add empty text boxes to database不要将空文本框添加到数据库
【发布时间】:2018-04-23 19:01:18
【问题描述】:

我有 30 个可用于用户输入的文本框和一个提交按钮,该按钮只需要插入带有值的文本框。目前,我有空文本框接收“null”值,但这会将单词“null”插入数据库而不是将其留空。

   protected void btnSubmit_Click(object sender, EventArgs e)
{

    String conString = @"Data Source=184.168.47.21;Initial Catalog=RecruitPursuit;Persist Security Info=True;User ID=RecruitPursuit;Password=Recruit20!8";
    SqlConnection con = new SqlConnection(conString);

    //create a command behavior object
    String cmdString = "INSERT INTO [Positions]( Sport_ID, Position)" +
    "VALUES (@Sport_ID, @Position1), (@Sport_ID, @Position2), (@Sport_ID, @Position3), (@Sport_ID, @Position4), (@Sport_ID, @Position5), (@Sport_ID, @Position6), (@Sport_ID, @Position7), (@Sport_ID, @Position8), (@Sport_ID, @Position9), (@Sport_ID, @Position10), (@Sport_ID, @Position11), (@Sport_ID, @Position12), (@Sport_ID, @Position13), (@Sport_ID, @Position14), (@Sport_ID, @Position15), (@Sport_ID, @Position16), (@Sport_ID, @Position17), (@Sport_ID, @Position18), (@Sport_ID, @Position19), (@Sport_ID, @Position20), (@Sport_ID, @Position21), (@Sport_ID, @Position22), (@Sport_ID, @Position23), (@Sport_ID, @Position24), (@Sport_ID, @Position25), (@Sport_ID, @Position26), (@Sport_ID, @Position27), (@Sport_ID, @Position28), (@Sport_ID, @Position29), (@Sport_ID, @Position30)";
    SqlCommand cmd = new SqlCommand(cmdString, con);

//这只是一个使用5个位置的例子。

    SqlParameter param0 = new SqlParameter();
    param0.ParameterName = "@Sport_Id";
    param0.Value = Session["SportID"];
    cmd.Parameters.Add(param0);


    SqlParameter param1 = new SqlParameter();
    param1.ParameterName = "@Position1";
    param1.Value = TextBoxOpt1.Text;
    cmd.Parameters.Add(param1);


    SqlParameter param2 = new SqlParameter();
    param2.ParameterName = "@Position2";

    if (TextBoxOpt2.Text != String.Empty)
    {

        param2.Value = TextBoxOpt2.Text;

    }

    if (TextBoxOpt2.Text == String.Empty)
    {

        param2.Value = "null";

        //cmd.Parameters.AddWithValue("@Position2", param2==null ? (object)DBNull.Value : param2);
    }
    cmd.Parameters.Add(param2);


    SqlParameter param3 = new SqlParameter();
    param3.ParameterName = "@Position3";
    if (TextBoxOpt3.Text != String.Empty)
    {
        param3.Value = TextBoxOpt3.Text;
    }

    if (TextBoxOpt3.Text == String.Empty)
    {
        param3.Value = "null";
    }
     cmd.Parameters.Add(param3);

    SqlParameter param4 = new SqlParameter();
    param4.ParameterName = "@Position4";
    param4.Value = TextBoxOpt4.Text;

    if (TextBoxOpt4.Text != String.Empty)
    {
        param4.Value = TextBoxOpt4.Text;
    }
    if (TextBoxOpt4.Text == String.Empty)
    {
        param4.Value = "null";
    }
    cmd.Parameters.Add(param4);

    SqlParameter param5 = new SqlParameter();
    param5.ParameterName = "@Position5";
    param5.Value = TextBoxOpt5.Text;
    if (TextBoxOpt5.Text != String.Empty)
    {
        param5.Value = TextBoxOpt5.Text;
    }
    if (TextBoxOpt5.Text == String.Empty)
    {
        param5.Value = "null";
    }
    cmd.Parameters.Add(param5);

}

【问题讨论】:

  • 这有什么问题?如果它们为空,则 DB 中应为 null?
  • 如果我只插入一个值,其他29个用“null”这个词填满数据库
  • 这不是问题,除非您的架构设计不当导致冗余。对于小型应用程序/数据库,这应该不是问题。

标签: asp.net


【解决方案1】:
   protected void btnSubmit_Click(object sender, EventArgs e)
{

    String conString = @"Data Source=184.168.47.21;Initial Catalog=RecruitPursuit;Persist Security Info=True;User ID=RecruitPursuit;Password=Recruit20!8";
    SqlConnection con = new SqlConnection(conString);

    //create a command behavior object
    String cmdString = "INSERT INTO [Positions]( Sport_ID, Position)" +
    "VALUES (@Sport_ID, @Position1), (@Sport_ID, @Position2), (@Sport_ID, @Position3), (@Sport_ID, @Position4), (@Sport_ID, @Position5), (@Sport_ID, @Position6), (@Sport_ID, @Position7), (@Sport_ID, @Position8), (@Sport_ID, @Position9), (@Sport_ID, @Position10), (@Sport_ID, @Position11), (@Sport_ID, @Position12), (@Sport_ID, @Position13), (@Sport_ID, @Position14), (@Sport_ID, @Position15), (@Sport_ID, @Position16), (@Sport_ID, @Position17), (@Sport_ID, @Position18), (@Sport_ID, @Position19), (@Sport_ID, @Position20), (@Sport_ID, @Position21), (@Sport_ID, @Position22), (@Sport_ID, @Position23), (@Sport_ID, @Position24), (@Sport_ID, @Position25), (@Sport_ID, @Position26), (@Sport_ID, @Position27), (@Sport_ID, @Position28), (@Sport_ID, @Position29), (@Sport_ID, @Position30)";
    SqlCommand cmd = new SqlCommand(cmdString, con);


    SqlParameter param0 = new SqlParameter();
    param0.ParameterName = "@Sport_Id";
    param0.Value = Session["SportID"];
    cmd.Parameters.Add(param0);

    cmd.Parameters.AddWithValue("@Position1", String.IsNullOrWhiteSpace(TextBoxOpt1.Text) ? (object)DBNull.Value : (object)TextBoxOpt1.Text);

    cmd.Parameters.AddWithValue("@Position2", String.IsNullOrWhiteSpace(TextBoxOpt2.Text) ? (object)DBNull.Value : (object)TextBoxOpt2.Text);

    cmd.Parameters.AddWithValue("@Position3", String.IsNullOrWhiteSpace(TextBoxOpt3.Text) ? (object)DBNull.Value : (object)TextBoxOpt3.Text);
    cmd.Parameters.AddWithValue("@Position4", String.IsNullOrWhiteSpace(TextBoxOpt4.Text) ? (object)DBNull.Value : (object)TextBoxOpt4.Text);
    cmd.Parameters.AddWithValue("@Position5", String.IsNullOrWhiteSpace(TextBoxOpt5.Text) ? (object)DBNull.Value : (object)TextBoxOpt5.Text);
    cmd.Parameters.AddWithValue("@Position6", String.IsNullOrWhiteSpace(TextBoxOpt6.Text) ? (object)DBNull.Value : (object)TextBoxOpt6.Text);
    cmd.Parameters.AddWithValue("@Position7", String.IsNullOrWhiteSpace(TextBoxOpt7.Text) ? (object)DBNull.Value : (object)TextBoxOpt7.Text);
    cmd.Parameters.AddWithValue("@Position8", String.IsNullOrWhiteSpace(TextBoxOpt8.Text) ? (object)DBNull.Value : (object)TextBoxOpt8.Text);
    cmd.Parameters.AddWithValue("@Position9", String.IsNullOrWhiteSpace(TextBoxOpt9.Text) ? (object)DBNull.Value : (object)TextBoxOpt9.Text);
    cmd.Parameters.AddWithValue("@Position10", String.IsNullOrWhiteSpace(TextBoxOpt10.Text) ? (object)DBNull.Value : (object)TextBoxOpt10.Text);
    cmd.Parameters.AddWithValue("@Position11", String.IsNullOrWhiteSpace(TextBoxOpt11.Text) ? (object)DBNull.Value : (object)TextBoxOpt11.Text);
    cmd.Parameters.AddWithValue("@Position12", String.IsNullOrWhiteSpace(TextBoxOpt12.Text) ? (object)DBNull.Value : (object)TextBoxOpt12.Text);
    cmd.Parameters.AddWithValue("@Position13", String.IsNullOrWhiteSpace(TextBoxOpt13.Text) ? (object)DBNull.Value : (object)TextBoxOpt13.Text);
    cmd.Parameters.AddWithValue("@Position14", String.IsNullOrWhiteSpace(TextBoxOpt14.Text) ? (object)DBNull.Value : (object)TextBoxOpt14.Text);
    cmd.Parameters.AddWithValue("@Position15", String.IsNullOrWhiteSpace(TextBoxOpt15.Text) ? (object)DBNull.Value : (object)TextBoxOpt15.Text);
    cmd.Parameters.AddWithValue("@Position16", String.IsNullOrWhiteSpace(TextBoxOpt16.Text) ? (object)DBNull.Value : (object)TextBoxOpt16.Text);
    cmd.Parameters.AddWithValue("@Position17", String.IsNullOrWhiteSpace(TextBoxOpt17.Text) ? (object)DBNull.Value : (object)TextBoxOpt17.Text);
    cmd.Parameters.AddWithValue("@Position18", String.IsNullOrWhiteSpace(TextBoxOpt18.Text) ? (object)DBNull.Value : (object)TextBoxOpt18.Text);
    cmd.Parameters.AddWithValue("@Position19", String.IsNullOrWhiteSpace(TextBoxOpt19.Text) ? (object)DBNull.Value : (object)TextBoxOpt19.Text);
    cmd.Parameters.AddWithValue("@Position20", String.IsNullOrWhiteSpace(TextBoxOpt20.Text) ? (object)DBNull.Value : (object)TextBoxOpt20.Text);
    cmd.Parameters.AddWithValue("@Position21", String.IsNullOrWhiteSpace(TextBoxOpt21.Text) ? (object)DBNull.Value : (object)TextBoxOpt21.Text);
    cmd.Parameters.AddWithValue("@Position22", String.IsNullOrWhiteSpace(TextBoxOpt22.Text) ? (object)DBNull.Value : (object)TextBoxOpt22.Text);
    cmd.Parameters.AddWithValue("@Position23", String.IsNullOrWhiteSpace(TextBoxOpt23.Text) ? (object)DBNull.Value : (object)TextBoxOpt23.Text);
    cmd.Parameters.AddWithValue("@Position24", String.IsNullOrWhiteSpace(TextBoxOpt24.Text) ? (object)DBNull.Value : (object)TextBoxOpt24.Text);
    cmd.Parameters.AddWithValue("@Position25", String.IsNullOrWhiteSpace(TextBoxOpt25.Text) ? (object)DBNull.Value : (object)TextBoxOpt25.Text);
    cmd.Parameters.AddWithValue("@Position26", String.IsNullOrWhiteSpace(TextBoxOpt26.Text) ? (object)DBNull.Value : (object)TextBoxOpt26.Text);
    cmd.Parameters.AddWithValue("@Position27", String.IsNullOrWhiteSpace(TextBoxOpt27.Text) ? (object)DBNull.Value : (object)TextBoxOpt27.Text);
    cmd.Parameters.AddWithValue("@Position28", String.IsNullOrWhiteSpace(TextBoxOpt28.Text) ? (object)DBNull.Value : (object)TextBoxOpt28.Text);
    cmd.Parameters.AddWithValue("@Position29", String.IsNullOrWhiteSpace(TextBoxOpt29.Text) ? (object)DBNull.Value : (object)TextBoxOpt29.Text);
    cmd.Parameters.AddWithValue("@Position30", String.IsNullOrWhiteSpace(TextBoxOpt30.Text) ? (object)DBNull.Value : (object)TextBoxOpt30.Text);

    int added = 0;
    try
    {
        con.Open();
        added = cmd.ExecuteNonQuery();

    }

    catch (Exception err)
    {
       // Output.Text = err.Message;
    }

    finally
    {
        con.Close();
    }

    Response.Redirect("Questionnaire.aspx");
}

【讨论】:

  • @Mikhaeljan 似乎一切都应该正常工作,但事实并非如此。 DBNull 属于什么命名空间?
【解决方案2】:

你在每个参数上定义

if (TextBoxOpt2.Text == String.Empty)
{
    param2.Value = "null";
}` 

您将 null 作为字符串传递,因此它也会将其作为 null 写入您的数据库。

你在 cmets 中的方法几乎是正确的。

cmd.Parameters.AddWithValue("@Position2", String.IsNullOrWhiteSpace(TextBoxOpt2.Text) ? (object)DBNull.Value:(object)TextBoxOpt2.Text;

然后,您可以删除所有这些 if,然后将其变成上面的一个衬里。

如果你真的想保留它的话

if(String.IsNullOrWhiteSpace(TextBoxOpt2.Text)){
   cmd.Parameters.AddWithValue("@Position2", DBNull.Value);
}else{
   cmd.Parameters.AddWithValue("@Position2", TextBoxOpt2.Text;
}

编辑工作示例

protected void btnSubmit_Click(object sender, EventArgs e)
{
    if (Session["SportID"] != null)
        if (int.TryParse(Session["SportID"].ToString(), out int SportId))
        {
            string conString = @"Data Source=184.168.47.21;Initial Catalog=RecruitPursuit;Persist Security Info=True;User ID=RecruitPursuit;Password=Recruit20!8";
            using (SqlConnection con = new SqlConnection(conString))
            {
                string cmdString = "INSERT INTO [Positions](Sport_ID, Position) " +
                "VALUES (@Sport_ID, @Position1), (@Sport_ID, @Position2), (@Sport_ID, @Position3), (@Sport_ID, @Position4), (@Sport_ID, @Position5), (@Sport_ID, @Position6), (@Sport_ID, @Position7), (@Sport_ID, @Position8), (@Sport_ID, @Position9), (@Sport_ID, @Position10), (@Sport_ID, @Position11), (@Sport_ID, @Position12), (@Sport_ID, @Position13), (@Sport_ID, @Position14), (@Sport_ID, @Position15), (@Sport_ID, @Position16), (@Sport_ID, @Position17), (@Sport_ID, @Position18), (@Sport_ID, @Position19), (@Sport_ID, @Position20), (@Sport_ID, @Position21), (@Sport_ID, @Position22), (@Sport_ID, @Position23), (@Sport_ID, @Position24), (@Sport_ID, @Position25), (@Sport_ID, @Position26), (@Sport_ID, @Position27), (@Sport_ID, @Position28), (@Sport_ID, @Position29), (@Sport_ID, @Position30)";
                using (SqlCommand cmd = new SqlCommand(cmdString, con))
                {

                    cmd.Parameters.AddWithValue("@Sport_ID", SportId);
                    cmd.Parameters.AddWithValue("@Position1", String.IsNullOrWhiteSpace(TextBoxOpt1.Text) ? (object)DBNull.Value : (object)TextBoxOpt1.Text);
                    cmd.Parameters.AddWithValue("@Position2", String.IsNullOrWhiteSpace(TextBoxOpt2.Text) ? (object)DBNull.Value : (object)TextBoxOpt2.Text);
                    cmd.Parameters.AddWithValue("@Position3", String.IsNullOrWhiteSpace(TextBoxOpt3.Text) ? (object)DBNull.Value : (object)TextBoxOpt3.Text);
                    cmd.Parameters.AddWithValue("@Position4", String.IsNullOrWhiteSpace(TextBoxOpt4.Text) ? (object)DBNull.Value : (object)TextBoxOpt4.Text);
                    cmd.Parameters.AddWithValue("@Position5", String.IsNullOrWhiteSpace(TextBoxOpt5.Text) ? (object)DBNull.Value : (object)TextBoxOpt5.Text);
                    cmd.Parameters.AddWithValue("@Position6", String.IsNullOrWhiteSpace(TextBoxOpt6.Text) ? (object)DBNull.Value : (object)TextBoxOpt6.Text);
                    cmd.Parameters.AddWithValue("@Position7", String.IsNullOrWhiteSpace(TextBoxOpt7.Text) ? (object)DBNull.Value : (object)TextBoxOpt7.Text);
                    cmd.Parameters.AddWithValue("@Position8", String.IsNullOrWhiteSpace(TextBoxOpt8.Text) ? (object)DBNull.Value : (object)TextBoxOpt8.Text);
                    cmd.Parameters.AddWithValue("@Position9", String.IsNullOrWhiteSpace(TextBoxOpt9.Text) ? (object)DBNull.Value : (object)TextBoxOpt9.Text);
                    cmd.Parameters.AddWithValue("@Position10", String.IsNullOrWhiteSpace(TextBoxOpt10.Text) ? (object)DBNull.Value : (object)TextBoxOpt10.Text);
                    cmd.Parameters.AddWithValue("@Position11", String.IsNullOrWhiteSpace(TextBoxOpt11.Text) ? (object)DBNull.Value : (object)TextBoxOpt11.Text);
                    cmd.Parameters.AddWithValue("@Position12", String.IsNullOrWhiteSpace(TextBoxOpt12.Text) ? (object)DBNull.Value : (object)TextBoxOpt12.Text);
                    cmd.Parameters.AddWithValue("@Position13", String.IsNullOrWhiteSpace(TextBoxOpt13.Text) ? (object)DBNull.Value : (object)TextBoxOpt13.Text);
                    cmd.Parameters.AddWithValue("@Position14", String.IsNullOrWhiteSpace(TextBoxOpt14.Text) ? (object)DBNull.Value : (object)TextBoxOpt14.Text);
                    cmd.Parameters.AddWithValue("@Position15", String.IsNullOrWhiteSpace(TextBoxOpt15.Text) ? (object)DBNull.Value : (object)TextBoxOpt15.Text);
                    cmd.Parameters.AddWithValue("@Position16", String.IsNullOrWhiteSpace(TextBoxOpt16.Text) ? (object)DBNull.Value : (object)TextBoxOpt16.Text);
                    cmd.Parameters.AddWithValue("@Position17", String.IsNullOrWhiteSpace(TextBoxOpt17.Text) ? (object)DBNull.Value : (object)TextBoxOpt17.Text);
                    cmd.Parameters.AddWithValue("@Position18", String.IsNullOrWhiteSpace(TextBoxOpt18.Text) ? (object)DBNull.Value : (object)TextBoxOpt18.Text);
                    cmd.Parameters.AddWithValue("@Position19", String.IsNullOrWhiteSpace(TextBoxOpt19.Text) ? (object)DBNull.Value : (object)TextBoxOpt19.Text);
                    cmd.Parameters.AddWithValue("@Position20", String.IsNullOrWhiteSpace(TextBoxOpt20.Text) ? (object)DBNull.Value : (object)TextBoxOpt20.Text);
                    cmd.Parameters.AddWithValue("@Position21", String.IsNullOrWhiteSpace(TextBoxOpt21.Text) ? (object)DBNull.Value : (object)TextBoxOpt21.Text);
                    cmd.Parameters.AddWithValue("@Position22", String.IsNullOrWhiteSpace(TextBoxOpt22.Text) ? (object)DBNull.Value : (object)TextBoxOpt22.Text);
                    cmd.Parameters.AddWithValue("@Position23", String.IsNullOrWhiteSpace(TextBoxOpt23.Text) ? (object)DBNull.Value : (object)TextBoxOpt23.Text);
                    cmd.Parameters.AddWithValue("@Position24", String.IsNullOrWhiteSpace(TextBoxOpt24.Text) ? (object)DBNull.Value : (object)TextBoxOpt24.Text);
                    cmd.Parameters.AddWithValue("@Position25", String.IsNullOrWhiteSpace(TextBoxOpt25.Text) ? (object)DBNull.Value : (object)TextBoxOpt25.Text);
                    cmd.Parameters.AddWithValue("@Position26", String.IsNullOrWhiteSpace(TextBoxOpt26.Text) ? (object)DBNull.Value : (object)TextBoxOpt26.Text);
                    cmd.Parameters.AddWithValue("@Position27", String.IsNullOrWhiteSpace(TextBoxOpt27.Text) ? (object)DBNull.Value : (object)TextBoxOpt27.Text);
                    cmd.Parameters.AddWithValue("@Position28", String.IsNullOrWhiteSpace(TextBoxOpt28.Text) ? (object)DBNull.Value : (object)TextBoxOpt28.Text);
                    cmd.Parameters.AddWithValue("@Position29", String.IsNullOrWhiteSpace(TextBoxOpt29.Text) ? (object)DBNull.Value : (object)TextBoxOpt29.Text);
                    cmd.Parameters.AddWithValue("@Position30", String.IsNullOrWhiteSpace(TextBoxOpt30.Text) ? (object)DBNull.Value : (object)TextBoxOpt30.Text);

                    int added = 0;
                    try
                    {
                        con.Open();
                        added = cmd.ExecuteNonQuery();

                    }
                    catch (Exception err)
                    {
                        // Output.Text = err.Message;
                    }
                }
            }
            Response.Redirect("Questionnaire.aspx");
        }
        else
        {
            // your object does not containt a int. Parse failed
        }
    else
    {
        //your session object is empty
    }
}

【讨论】:

  • 使用第二个选项,我是否只使用相同的格式并每次更改文本框和位置编号?例如.... cmd.Parameters.AddWithValue("@Position2", String.IsNullOrWhiteSpace(TextBoxOpt2.Text) ? (object)DBNull.Value:(object)TextBoxOpt2.Text; 和 cmd.Parameters.AddWithValue("@Position3 ", String.IsNullOrWhiteSpace(TextBoxOpt3.Text) ? (object)DBNull.Value:(object)TextBoxOpt3.Text;
  • 我进行了更改,但这些值不会插入到数据库中。我在答案中发布了更新的代码。
  • @price 我认为问题出在您的会话变量上。由于您没有将其转换为任何类型,我认为这会导致一些错误。无论如何我改变了一些东西检查它应该工作的最后一个编辑部分。
猜你喜欢
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多