【发布时间】:2016-05-11 11:47:12
【问题描述】:
我们的 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(!@SpecialRequests.Text.Equals(null) && @SpecialRequests.Text!="") 检查两个条件。因为该值不是作为空值出现的,所以它作为空字符串出现。即“”
-
你有尾随逗号;例如
sql5 += " [Balance_Outstanding]=@BalanceOutstanding,";留下以逗号结尾的 SQL(如果这是唯一要更新的字段)。更好的方法可能是使用存储过程来保存逻辑如下:stackoverflow.com/questions/15569860/…
标签: c# asp.net sql-server if-statement