C# 当只有一些文本框是空的,而有些是满的时,如何使用文本框中的值更新sql server数据库中的数据?

C# 当只有一些文本框是空的,而有些是满的时,如何使用文本框中的值更新sql server数据库中的数据?,c#,asp.net,sql-server,if-statement,C#,Asp.net,Sql Server,If Statement,我们的aspx页面上有一个表单,其中包含许多文本框。我们希望使用输入到这些文本框中的值更新sql server数据库中的多个表,但是如果任何文本框留空,我们希望保留该列的数据,目前它不会接受空值 如果所有文本框都已填充,则其功能正常;如果未填充,则会出现错误: 输入字符串的格式不正确。 单击“提交”按钮时激发的代码: protected void buttonClicked(object sender, EventArgs e) { string CS = Con

我们的aspx页面上有一个表单,其中包含许多文本框。我们希望使用输入到这些文本框中的值更新sql server数据库中的多个表,但是如果任何文本框留空,我们希望保留该列的数据,目前它不会接受空值

如果所有文本框都已填充,则其功能正常;如果未填充,则会出现错误: 输入字符串的格式不正确。

单击“提交”按钮时激发的代码:

    protected void buttonClicked(object sender, EventArgs e)
    {
        string CS = ConfigurationManager.ConnectionStrings["G4StowawaysConnectionString"].ConnectionString;

        SqlConnection conn = new SqlConnection(CS);

        conn.Open();

        String sql5 = "" ;

        if (!@BalanceOutstanding.Text.Equals(null) | !@Comments.Text.Equals(null))
        {

        sql5 += "UPDATE BookingView SET ";

        if (!@BalanceOutstanding.Text.Equals(null))
        {
            sql5 += " [Balance_Outstanding]=@BalanceOutstanding,";
        }

        if (!@Comments.Text.Equals(null))
        {
            sql5 += " [Comments]=@Comments ";
        }

        sql5 += "WHERE [Booking_Ref] = @BookingRef;";

        }


        if (!@BoatID.Text.Equals(null) | !@SpecialRequests.Text.Equals(null) | !@LeadPassenger.Text.Equals(null) | !@Duration.Text.Equals(null) | !@Pets.Text.Equals(null) | !@Children.Text.Equals(null) | !@Passengers.Text.Equals(null))
        {

        sql5 += "UPDATE vBoat_Booking SET";

        if (!@BoatID.Text.Equals(null))
        {
            sql5 += " [BoatID]=@BoatID,";
        }

        if (!@SpecialRequests.Text.Equals(null))
        {
            sql5 += " [Special_Request]=@SpecialRequests,";
        }

        if (!@LeadPassenger.Text.Equals(null))
        {
            sql5 += " [Lead_PassengerID]=@LeadPassenger,";
        }

        if (!@Duration.Text.Equals(null))
        {
            sql5 += " [Duration_In_Hours]=@Duration,";
        }

        if (!@Pets.Text.Equals(null))
        {
            sql5 += " [Number_of_pets]=@Pets,";
        }

        if (!@Children.Text.Equals(null))
        {
            sql5 += " [Number_of_children]=@Children,";
        }

        if (!@Passengers.Text.Equals(null))
        {
            sql5 += " [Number_of_passengers]=@Passengers ";
        }

        sql5 += "WHERE [Booking_Ref] = @BookingRef;";

        }


        SqlCommand cmd2 = new SqlCommand(sql5, conn);

        //add our parameters to our command object  


     cmd2.Parameters.AddWithValue("@BookingRef", Convert.ToInt32(BookingRef.Text));
            cmd2.Parameters.AddWithValue("@BoatID", Convert.ToInt32(BoatID.Text));
            cmd2.Parameters.AddWithValue("@LeadPassenger", Convert.ToInt32(LeadPassenger.Text));
            cmd2.Parameters.AddWithValue("@Duration", Convert.ToInt32(Duration.Text));
            cmd2.Parameters.AddWithValue("@Pets", Convert.ToInt32(Pets.Text));
            cmd2.Parameters.AddWithValue("@Children", Convert.ToInt32(Children.Text));
            cmd2.Parameters.AddWithValue("@Passengers", Convert.ToInt32(Passengers.Text));
            cmd2.Parameters.AddWithValue("@SpecialRequests", SpecialRequests.Text);
            cmd2.Parameters.AddWithValue("@BalanceOutstanding", Convert.ToInt32(BalanceOutstanding.Text));
            cmd2.Parameters.AddWithValue("@Comments", Comments.Text);

            cmd2.ExecuteNonQuery();

            conn.Close();


    }

在if块中使用尾随逗号,应该使用前导逗号。除了添加到动态SQL的第一个字段之外。您可以使用bool来确定代码段是否需要前导逗号


另一个选项是在存储过程中创建动态SQL。如果这样做,您将希望使用参数,就像在C#代码中使用参数一样。使用sp_executesql而不是exec。这允许您定义参数并为这些参数指定一个值。请查看将sp_executesql与参数一起使用的示例。

在if块中使用尾随逗号,应该使用前导逗号。除了添加到动态SQL的第一个字段之外。您可以使用bool来确定代码段是否需要前导逗号


另一个选项是在存储过程中创建动态SQL。如果这样做,您将希望使用参数,就像在C#代码中使用参数一样。使用sp_executesql而不是exec。这允许您定义参数并为这些参数指定一个值。查看将sp_executesql与参数一起使用的示例。

看看这个:如果(!@SpecialRequests.Text.Equals(null)&&&@SpecialRequests.Text!=“”)检查这两个条件。因为值不是null,所以它是空字符串。i、 e“后面有逗号;e、 g.
sql5+=“[未结清余额]=@balancesuspended,”使SQL以逗号结尾(如果这是唯一要更新的字段)。更好的方法可能是使用存储过程来保存逻辑,如下所示:查看以下内容:if(!@SpecialRequests.Text.Equals(null)&&&@SpecialRequests.Text!=“”)检查这两个条件。因为值不是null,所以它是空字符串。i、 e“后面有逗号;e、 g.
sql5+=“[未结清余额]=@balancesuspended,”使SQL以逗号结尾(如果这是唯一要更新的字段)。更好的方法可能是使用存储过程保存逻辑,如下所示: