C# 未使用SqlDataAdapter保存到数据库的更改
我的更改无法保存到SQL Server数据库,这让我很为难 我可以正确读取数据库,当调用从数据库刷新的C# 未使用SqlDataAdapter保存到数据库的更改,c#,sql-server,database,sqldataadapter,C#,Sql Server,Database,Sqldataadapter,我的更改无法保存到SQL Server数据库,这让我很为难 我可以正确读取数据库,当调用从数据库刷新的RefreshGrid()时,gridview会正确更新。但当重新启动程序或检查实际数据库时,更改就消失了 我通常会使用实体框架来实现这一点,但有时需要学习其他方法 private string conString = ConfigurationManager.ConnectionStrings["RewardsConnectionString"].ConnectionString; priva
RefreshGrid()
时,gridview会正确更新。但当重新启动程序或检查实际数据库时,更改就消失了
我通常会使用实体框架来实现这一点,但有时需要学习其他方法
private string conString = ConfigurationManager.ConnectionStrings["RewardsConnectionString"].ConnectionString;
private RewardsDS rewardsDset = new RewardsDS();
private SqlDataAdapter CreateDataAdapter(SqlConnection conn)
{
// Build the selection query.
SqlDataAdapter rewardsAdapter = new SqlDataAdapter();
SqlCommand selectCommand = new SqlCommand("SELECT * FROM Purchases", conn);
rewardsAdapter.SelectCommand = selectCommand;
// Build the insertion query
SqlCommand insertCommand = new SqlCommand(
@"INSERT INTO Purchases (PurchaseDate, Amount, CustomerId)
VALUES (@PurchaseDate, @Amount, @CustomerId)", conn);
insertCommand.Parameters.Add("@PurchaseDate", SqlDbType.DateTime, 0, "PurchaseDate"); // Not sure about this zero ...
insertCommand.Parameters.Add("@Amount", SqlDbType.Decimal, 0, "Amount");
insertCommand.Parameters.Add("@CustomerId", SqlDbType.Int, 0, "CustomerId");
rewardsAdapter.InsertCommand = insertCommand;
// Build the update query
SqlCommand updateCommand = new SqlCommand(
@"UPDATE Purchases SET Amount = @Amount, PurchaseDate = @PurchaseDate WHERE PurchaseId = @PurchaseId", conn);
updateCommand.Parameters.Add("@Amount", SqlDbType.Decimal, 0, "Amount");
updateCommand.Parameters.Add("@PurchaseDate", SqlDbType.DateTime, 0, "PurchaseDate");
SqlParameter param = updateCommand.Parameters.Add("@PurchaseId", SqlDbType.Int, 0, "PurchaseId");
param.SourceVersion = DataRowVersion.Original;
rewardsAdapter.UpdateCommand = updateCommand;
// Build the delete query
SqlCommand deleteCommand = new SqlCommand(
"DELETE FROM Purchases WHERE PurchaseId = @PurchaseId", conn);
param = deleteCommand.Parameters.Add("@Id", SqlDbType.Int, 0, "PurchaseId");
param.SourceVersion = DataRowVersion.Original;
rewardsAdapter.DeleteCommand = deleteCommand;
return rewardsAdapter;
}
// Gets changes and saves them to the database.
private void SaveChanges()
{
using (SqlConnection conn = new SqlConnection(conString))
{
var fadapter = CreateDataAdapter(conn);
conn.Open();
DataSet changes = rewardsDset.GetChanges();
try
{
fadapter.Update(changes, "Purchases");
}
catch (Exception ex)
{
MessageBox.Show("There are no updates to be saved");
}
conn.Close();
rewardsDset.AcceptChanges();
}
}
// Refresh the dataGridView from the database
private void RefreshGrid()
{
rewardsDset.Clear();
using (SqlConnection conn = new SqlConnection(conString))
{
conn.Open();
SqlDataAdapter myAdapter = new SqlDataAdapter("SELECT * FROM Purchases", conn);
myAdapter.Fill(rewardsDset, "Purchases");
conn.Close();
dataGridView1.DataSource = null;
this.dataGridView1.DataSource = rewardsDset.Tables["Purchases"];
}
}
您只需执行以下查询:
rewardsAdapter.InsertCommand.ExecuteNonQuery();
首先,我要为浪费任何人的时间而道歉。终于找到了导致这个错误的原因,它比我想象的要基本得多,根本不是我一直试图寻找解决方案的地方。 关于连接字符串,我犯了一个令人尴尬的错误,但如果有人重复我的错误,这就是: 我一直在使用数据集的连接字符串,而不是实际的数据库…
添加正确的连接字符串肯定解决了我的问题,当然,仅凭我上面发布的代码,任何人都无法看到。感谢您的快速回答!正如我所暗示的,被实体框架宠坏了,我在这里毫无头绪。但我相信这是从数据集执行的。在RewardsDS中,我生成了以下行:
intReturnValue=this.Adapter.InsertCommand.ExecuteOnQuery()代码>我是否特别需要在其他地方调用它?