如何在单击按钮时将更改保存到DataView到数据库

本文关键字:保存 DataView 数据库 单击 按钮 | 更新日期: 2023-09-27 18:01:25

我是Asp.net的新手,我正试图找出如何以编程方式更新SqlDataSource中的值。这是我的按钮点击监听器:

        protected void ApproveLoanButton_Click(object sender, EventArgs e)
    {
        DataView dv = (DataView)DetailsSqlDataSource.Select(DataSourceSelectArguments.Empty);
        dv.AllowEdit = true;
        using (var dt = dv.ToTable())
        {
            var oldValue = dt.Rows[0]["IsApproved"].ToString();
            dt.Rows[0]["IsApproved"] = true;
            var newValue = dt.Rows[0]["IsApproved"].ToString();
            dt.AcceptChanges();
            GridView1.DataBind();
            DetailsView1.DataBind();
        }         
    }

oldValue为false, newValue为true,所以我正在改变值,但当我调用AcceptChanges()时,它不会保存到数据库。我哪里做错了?我已经在这上面花了几个小时了。谢谢你的帮助!

如何在单击按钮时将更改保存到DataView到数据库

我不知道你的DetailsSqlDataSource是什么,或者你的数据库结构是什么,但是你显然需要写一些保存和读取方法。

如果你这样做了,你会得到这样的东西:

    protected void ApproveLoanButton_Click(object sender, EventArgs e)
    {
        DataView dv = (DataView)DetailsSqlDataSource.Select(DataSourceSelectArguments.Empty);
        dv.AllowEdit = true;
        using (var dt = dv.ToTable())
        {
            var oldValue = dt.Rows[0]["IsApproved"].ToString();
            if (-1 < SaveApproved((int)dt.Rows[0]["ID"], true))
            {
                dt.Rows[0]["IsApproved"] = true;
                var newValue = dt.Rows[0]["IsApproved"].ToString();
                dt.AcceptChanges();
                DetailsSqlDataSource = GetTable();
                GridView1.DataBind();
                DetailsView1.DataBind();
            }
        }
    }

您需要修改这些才能工作,但这里有一个示例:

    private const string SQL_CONNECTION = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";
    private DataTable GetTable()
    {
        var table = new DataTable();
        using (var con = new System.Data.SqlClient.SqlConnection(SQL_CONNECTION))
        {
            con.Open();
            using (var cmd = new System.Data.SqlClient.SqlCommand("SELECT * FROM MyTable;", con))
            {
                table.Load(cmd.ExecuteReader());
            }
        }
        return table;
    }
    private int SaveApproved(int rowID, bool approved)
    {
        using (var con = new System.Data.SqlClient.SqlConnection(SQL_CONNECTION))
        {
            con.Open();
            using (var cmd = new System.Data.SqlClient.SqlCommand("UPDATE MyTable SET IsApproved=@IsApproved WHERE ID=@ID;", con))
            {
                cmd.Parameters.Add("@IsApproved", SqlDbType.Bit).Value = approved;
                cmd.Parameters.Add("@ID", SqlDbType.Int).Value = rowID;
                return cmd.ExecuteNonQuery();
            }
        }
    }