Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用IsPostBack for Update命令来解决时间问题_C#_Asp.net_Sql_Ispostback - Fatal编程技术网

C# 如何使用IsPostBack for Update命令来解决时间问题

C# 如何使用IsPostBack for Update命令来解决时间问题,c#,asp.net,sql,ispostback,C#,Asp.net,Sql,Ispostback,我有一个asp.net detailsview,它将数据插入付款分配表,但是我想运行一个更新命令,将数据更新到s_transaction_查询表中,这是在C#中完成的。当我运行代码时,update命令首先在insert命令之前运行,这样就不会将数据放入s_事务_查询表中 我已经创建了更新命令,当用户在详细信息视图中单击“插入”按钮时运行。 insert命令链接到detailview的Sql数据源 我被告知我可以在页面加载中使用“IsPostBack”属性,但确定如何做到这一点,是否有人可以帮助我

我有一个asp.net detailsview,它将数据插入付款分配表,但是我想运行一个更新命令,将数据更新到s_transaction_查询表中,这是在C#中完成的。当我运行代码时,update命令首先在insert命令之前运行,这样就不会将数据放入s_事务_查询表中

我已经创建了更新命令,当用户在详细信息视图中单击“插入”按钮时运行。 insert命令链接到detailview的Sql数据源

我被告知我可以在页面加载中使用“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 (?, ?, ?, ?, ?, ?, ?)">

调用insert语句的按钮:

  <asp:Button ID="Button1" runat="server" CausesValidation="True" CommandName="Insert" Text="Create"/>

您应该在每次操作后关闭连接。您已在“page_load”上打开了一个连接,但没有将其关闭,而且由于
page_load
也会在每次回发时执行,这意味着每次单击按钮时,您都会尝试再次打开连接而不关闭它

还要注意,
页面加载
按钮单击
事件处理程序之前执行,因此每次单击按钮都会打开连接而不关闭,并尝试在单击处理程序中再次打开连接

OleDbConnection是一个一次性对象,这意味着它实现了.dispose()函数,这也意味着它可以在
using()
语句中使用

using()语句创建一个新对象,并在之后处理它。 在microsoft网站上,您对在c#中打开/关闭/处理OLEDB连接有很好的解释:

基本上,为了使其适应您的代码,您需要做如下操作, 为了方便起见,首先将数据库处理放在一个单独的函数中,并从page load:调用它:

    protected void Page_Load(object sender, EventArgs e)
    {
        string conn = "";
        string sqlCOmmand= "inset blablabla into blablabla";
        conn = ConfigurationManager.ConnectionStrings["Conn"].ToString();


        InsertRow(conn,sqlCOmmand);


    }


//taken from microsoft website
public void InsertRow(string connectionString, string insertSQL)
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        // The insertSQL string contains a SQL statement that 
        // inserts a new row in the source table.
        OleDbCommand command = new OleDbCommand(insertSQL);

        // Set the Connection to the new OleDbConnection.
        command.Connection = connection;

        // Open the connection and execute the insert command. 
        try
        {
            connection.Open();
            command.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        // The connection is automatically closed when the 
        // code exits the using block.
    }
}
好的,在这部分清理完毕后,转到下一部分:

我假设您只想在页面加载正确时插入数据库?而不是每次点击按钮后。因此,您需要指示asp.net仅在第一次加载而不是回发时执行代码。您可能希望更改页面加载函数,使其如下所示:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            string conn = "";
            string sqlCOmmand = "inset blablabla into blablabla";
            conn = ConfigurationManager.ConnectionStrings["Conn"].ToString();
            InsertRow(conn, sqlCOmmand);
        }
    }

对于单击处理程序,您应该创建另一个函数UpdateRow,并使用using()语句执行同样的操作,然后将其放入单击处理程序中

IsPostBack只是在回发时引发的一个标志。例如,如果您单击按钮,它将发回您的aspx页面,并且iPostBack将为true。这基本上意味着iPostback只在您第一次加载页面时为false,在页面回发时为true。此外,page_load在click事件处理程序之前执行,因此应该是正常的。您是否有其他问题?您在加载页面上打开了连接,但似乎没有关闭它,这是您的完整代码吗?我以为在运行更新命令后,我通过按钮1\u单击事件关闭了连接?是否有另一种方法确保先运行aspx页面上的insert命令?完成insert后,必须在页面加载中关闭那里的连接。如果要对页面加载执行操作,则必须打开/关闭页面加载。或者更好,在按钮和页面加载的连接上使用
using()
块。另外,我假设您希望插入只执行一次,而不是每次单击按钮时执行一次,因此仅在页面首次加载时使用
if(!IsPostBack)
运行它。我知道这是否适用于您,因此我可以将其添加为应答我更改代码(请参见上文)但它不起作用。你能更具体地说明它是如何不起作用的吗?你有例外吗?您是否检查了您的数据库以查看它是否已插入?没有给出任何例外,在我检查了数据库之前,它看起来好像工作正常,并且在s_transaction_查询表中没有数据。根据您的代码,您似乎正在尝试更新某些内容,您确定您不打算先执行“插入”语句吗?您更新的数据是否存在?已在aspx页面的detailsview中创建insert语句。