C# 在部件中向数据库添加数据(asp.net)
我有几个页面用于预订,每个页面都保存数据。例如,第一页将目的地添加到数据库中,第二页选择乘客数量 我有一张桌子来存储所有这些:C# 在部件中向数据库添加数据(asp.net),c#,sql,asp.net,sql-server,tsql,C#,Sql,Asp.net,Sql Server,Tsql,我有几个页面用于预订,每个页面都保存数据。例如,第一页将目的地添加到数据库中,第二页选择乘客数量 我有一张桌子来存储所有这些: CREATE TABLE [dbo].[Transactions] ( [cardNumber ] NCHAR (10) NULL, [Cost] NCHAR (10) NULL, [Passengers] NCHAR (10) NULL, [Destination] NCHAR (10) NULL ); 在目标页面上,我使用以下代码将目标输入数据库:
CREATE TABLE [dbo].[Transactions] (
[cardNumber ] NCHAR (10) NULL,
[Cost] NCHAR (10) NULL,
[Passengers] NCHAR (10) NULL,
[Destination] NCHAR (10) NULL
);
在目标页面上,我使用以下代码将目标输入数据库:
protected void Button2_Click1(object sender, EventArgs e)
{
try
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ConnectionString);
conn.Open();
string insert = "insert into Transactions (Destination) values (@Destination)";
SqlCommand com = new SqlCommand(insert, conn);
com.Parameters.AddWithValue("@Destination", DropDownList1.SelectedItem);
com.ExecuteNonQuery();
conn.Close();
}
catch (Exception ex)
{
Response.Write("Error: " + ex.ToString());
}
Response.Redirect("Booking.aspx");
}
在下一页,我有相对相同的代码来输入乘客数量:
protected void Button2_Click(object sender, EventArgs e)
{
try
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ConnectionString);
conn.Open();
string insert = "insert into Transactions (Passengers) values (@Passengers)";
SqlCommand com = new SqlCommand(insert, conn);
com.Parameters.AddWithValue("@Passengers", DropDownList1.SelectedItem);
com.ExecuteNonQuery();
conn.Close();
}
catch(Exception ex)
{
Response.Write("Error: " + ex.ToString());
}
Response.Redirect("Payment.aspx");
}
但在执行此操作后,没有数据输入数据库。如果有人知道我可以一次一个数据输入数据库,请让我知道
如果不能这样做,有更好的方法再次这样做,请让我知道
谢谢大家抽出时间。您的表中应该有一个专用的主键列,我建议使用自动递增整数
CREATE TABLE [dbo].[Transactions]
(
[ID] INT NOT NULL PRIMARY KEY IDENTITY(1,1),
[CardNumber] NCHAR (10) NULL,
[Cost] NCHAR (10) NULL,
[Passengers] NCHAR (10) NULL,
[Destination] NCHAR (10) NULL
);
然后,使用存储过程,而不是临时SQL
CREATE PROCEDURE TransactionSave
(
@ID int = null,
@CardNumber nchar(10) = null,
@Cost nchar(10) = null,
@Passengers nchar(10) = null,
@Destination nchar(10) = null
)
AS
BEGIN
DECLARE @ExistingID int
SELECT @ExistingID = ID FROM Transaction WHERE ID = @ID
IF @ExistingID is null
BEGIN
--Insert
INSERT INTO Transaction (CardNumber, Cost, Passengers, Destination)
VALUES (@CardNumber, @Cost, @Passengers, @Destination)
SELECT CAST(SCOPE_IDENTITY() AS INT) AS 'TransactionID'
END
ELSE
BEGIN
--Update
UPDATE Transaction
SET
CardNumber = ISNULL(@CardNumber, CardNumber),
Cost = ISNULL(@Cost, Cost),
Passengers = ISNULL(@Passengers, Passengers),
Destination = ISNULL(@Destination, Destination),
WHERE ID = @ExistingID
SELECT @ExistingID AS 'TransactionID'
END
END
然后,在代码隐藏中,您需要保留正在处理的事务的ID值,以确保您正在更新正确的行:
protected void Button2_Click(object sender, EventArgs e)
{
int transactionID = hfID.Value;
try
{
using(SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ConnectionString))
{
SqlCommand cmd = new SqlCommand("TransactionSave", conn);
cmd.Parameters.AddWithValue("@ID", transactionID);
cmd.Parameters.AddWithValue("@Passengers", DropDownList1.SelectedValue);
transactionID = cmd.ExecuteScalar();
hfID.Value = transactionID;
}
}
catch(Exception ex)
{
Response.Write("Error: " + ex.ToString());
}
}
移动Response.RedirectPayment.aspx;控制室关闭后;如果抛出en exception,Response.Write将被重定向隐藏。当您运行代码并使用断点时,还会发生什么情况呢?请使用{另外,试着发出一个提交,看看这是否有帮助。你也知道,点击按钮会导致回发。每个页面的页面加载代码是什么样子的。我会直截了当地告诉你,我不知道这一半的意思是什么。不过页面加载无效是空的,感谢Kalten,我已经这样做了,因此在出现错误时它不会重定向。在调试器中,DropDownList1.SelectedItem的值是多少。这里有一些提示查看以下内容,您需要需要com.Parameters所需的文本值。AddWithValue@Passengers,DropDownList1.SelectedItem.Text;dropdownlist的选项用于第一个页面,例如电影院、bowlplex等,只是示例数据。第二页的选项只是数字,但它们是文本格式,所以,一、二、三等。我将尝试将所选项目更改为文本,看看发生了什么。谢谢,我现在就尝试一下,看看发生了什么。给我一点时间先通读一遍,这样我就知道发生了什么:听起来不错。简而言之,你需要保留一些东西来表示你正在使用的“哪一行”。行的ID由该进程返回,您可以使用cmd.ExecuteScalar捕获它。然后,一旦输入了必要的信息,您可能会想要重定向;“正常路线”是让UI上的表单需要完整的“行”数据,然后单击一个按钮并一次执行行的插入。然而,“非典型”并不意味着“不可能”。它很有效。干杯都德:有一些错误,诸如此类,但在谷歌工作了一段时间后,它就完成了。非常感谢:这里显示的代码有任何错误吗?它确实假设您添加了一个HiddenField hfID。如果你还有任何问题,请告诉我。