【发布时间】:2014-03-23 13:00:13
【问题描述】:
我有将数据插入支付分配表的 asp.net detailsview,但是我想运行一个更新命令,将数据更新到 s_transaction_enquiry 表中,这是在 C# 中完成的。当我运行代码时,更新命令在插入命令之前首先运行,因此不会将数据放入 s_transaction_enquiry 表中。
我创建了更新命令,当用户单击详细信息视图中的插入按钮时运行。 插入命令链接到详细视图的 Sql 数据源。
有人告诉我可以在 page_load 中使用“IsPostBack”属性,但确定如何执行此操作,有人可以帮助我吗??
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string conn = "";
string sqlCOmmand = "UPDATE s_transaction_enquiry, payment_allocation SET s_transaction_enquiry.payment_amount = payment_allocation.payment_amount, s_transaction_enquiry.payment_ref = payment_allocation.payment_ref, s_transaction_enquiry.payment_received_date = payment_allocation.payment_received_date WHERE payment_allocation.s_invoice_numer = s_transaction_enquiry.s_invoice_number AND payment_allocation.account_number = s_transaction_enquiry.account_number";
conn = ConfigurationManager.ConnectionStrings["Conn"].ToString();
UpdateRow(conn, sqlCOmmand);
}
}
public void UpdateRow(string connectionString, string insertSQL)
{
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
OleDbCommand command = new OleDbCommand(insertSQL);
command.Connection = connection;
try
{
connection.Open();
command.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
从数据源插入语句:
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString1 %>" DeleteCommand="DELETE FROM [payment_allocation] WHERE [payment_ref] = ?" ProviderName="<%$ ConnectionStrings:ConnectionString1.ProviderName %>" SelectCommand="SELECT * FROM [payment_allocation]"
InsertCommand="INSERT INTO [payment_allocation] ([payment_ref], [account_number], [account_ref], [allocate_date], [payment_amount], [payment_received_date], [s_invoice_numer]) VALUES (?, ?, ?, ?, ?, ?, ?)">
调用插入语句的按钮:
<asp:Button ID="Button1" runat="server" CausesValidation="True" CommandName="Insert" Text="Create"/>
【问题讨论】:
-
IsPostBack 只是一个在回发时引发的标志。比如,如果你点击你的按钮,它会回发到你的 aspx 页面并且 IsPostBack 会是真的。这基本上意味着 IsPostBack 只会在您第一次加载页面时为假,并且在页面回发时为真。此外,page_load 在单击事件处理程序之前执行,所以它应该没问题。你有没有可能在这里遇到不同的问题?
-
您在 page_load 上打开了连接,但您似乎没有关闭它,这是您的完整代码吗?
-
我以为我在更新命令运行后关闭了 Button1_click 事件的连接?是否有另一种方法可以确保 aspx 页面上的插入命令首先运行?
-
您必须在完成插入后在页面加载中关闭连接。您在页面加载时执行操作,您必须打开/关闭它。或者更好的是,在按钮和 page_load 的连接上使用
using()块。另外,我假设您希望插入只执行一次,而不是每次单击按钮时,因此使用if(!IsPostBack )仅在页面首次加载时运行它 -
让我知道这是否适合你,所以我可以将其添加为答案
标签: c# asp.net sql ispostback