如何在单击按钮时将更改保存到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()时,它不会保存到数据库。我哪里做错了?我已经在这上面花了几个小时了。谢谢你的帮助!
我不知道你的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();
}
}
}