【发布时间】:2016-05-11 14:17:56
【问题描述】:
我们有一个包含多个文本框的 aspx 页面。我们希望将输入到这些文本框中的数据用它们更新我们的 SQL Server 数据库。但是,如果任何文本框留空,那么我们希望数据保持原样。
我们编写了以下存储过程来执行更新:
ALTER PROCEDURE pr_updateBooking
(
@BookingRef INT,
@BoatID INT,
@LeadPassenger INT,
@StartDate Date,
@Duration INT,
@Pets INT,
@Children INT,
@Passengers INT,
@SpecialRequests VARCHAR(255),
@BalanceOutstanding NUMERIC(12, 2),
@Comments VARCHAR(50)
)
AS
DECLARE @error INT
UPDATE BookingView
SET Balance_Outstanding = @BalanceOutstanding,
Comments = @Comments
WHERE Booking_Ref = @BookingRef
UPDATE vBoat_Booking
SET BoatID = @BoatID, Lead_PassengerID = @LeadPassenger,
Start_Date = @StartDate, Duration_In_hours = @Duration,
Number_of_pets = @Pets, Number_of_children = @Children,
Number_of_passengers = @Passengers
WHERE Booking_Ref = @BookingRef
SET @error = @@error
IF @error <> 0
RETURN 99
ELSE
RETURN 0
这是在我们的 aspx 页面上单击提交按钮时将运行的 C# 代码
protected void buttonClicked(object sender, EventArgs e)
{
string CS = ConfigurationManager.ConnectionStrings["G4StowawaysConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(CS);
conn.Open();
SqlCommand cmd2 = new SqlCommand("pr_updateBooking", conn);
cmd2.CommandType = CommandType.StoredProcedure;
// add our parameters to our command object
cmd2.Parameters.Add("@BookingRef", SqlDbType.Int).Value = BookingRef.Text;
cmd2.Parameters.Add("@BoatID", SqlDbType.Int).Value = BoatID.Text;
cmd2.Parameters.Add("@LeadPassenger", SqlDbType.Int).Value = LeadPassenger.Text;
cmd2.Parameters.Add("@StartDate", SqlDbType.Date).Value = StartDate.Text;
cmd2.Parameters.Add("@Duration", SqlDbType.Money).Value = Duration.Text;
cmd2.Parameters.Add("@Pets", SqlDbType.Int).Value = Pets.Text;
cmd2.Parameters.Add("@Children", SqlDbType.Int).Value = Children.Text;
cmd2.Parameters.Add("@Passengers", SqlDbType.Int).Value = Passengers.Text;
cmd2.Parameters.Add("@SpecialRequests", SqlDbType.VarChar, 255).Value = SpecialRequests.Text;
cmd2.Parameters.Add("@BalanceOutstanding", SqlDbType.Int).Value = BalanceOutstanding.Text;
cmd2.Parameters.Add("@Comments", SqlDbType.VarChar, 50).Value = Comments.Text;
try
{
if (cmd2.Connection.State == ConnectionState.Closed)
{
cmd2.Connection.Open();
}
cmd2.ExecuteNonQuery();
}
catch (Exception)
{
}
finally
{
cmd2.Connection.Close();
}
}
当我们运行页面时没有错误消息但是数据没有出现在数据库中!?
【问题讨论】:
-
使用分析器查看从页面发送到 SQL Server 的命令(如果有)。
-
cmd2.ExecuteNonQuery();返回的计数是多少?您还返回 0 或 99,您如何在 C# 代码中读取它?今后请正确格式化您的内容/代码,以便您的帖子得到更认真的对待。 -
我真的很抱歉我对此很陌生。我不知道如何使用分析器,也不知道如何找出该方法返回的计数?
-
请看。,见@Guffastackoverflow.com/questions/767574/…最后的评论
-
你的连接字符串是什么样的?请给我们看看好吗?
标签: c# asp.net sql-server stored-procedures