我正在编写一个更新我创建的数据库的应用程序。应用程序上有一个datagridview,它显示数据库中的数据。 我的应用程序正在发生一些非常奇怪的事情。
以下是更新数据库的代码
string updateCommandString = "UPDATE RoomsTable SET [Date Checked]=@checkedDate WHERE ID = @id";
using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\users\spreston\documents\visual studio 2012\Projects\roomChecksProgram\roomChecksProgram\roomsBase.accdb"))
{
using (OleDbCommand updateCommand = new OleDbCommand())
{
updateCommand.Connection = conn;
updateCommand.CommandText = updateCommandString;
updateCommand.CommandType = CommandType.Text;
updateCommand.Parameters.AddWithValue("@checkedDate",
this.dateTimePicker1.Value.ToShortDateString());
updateCommand.Parameters.AddWithValue("@id", row.roomID);
try
{
conn.Open();
updateCommand.ExecuteNonQuery();
conn.Close();
conn.Dispose();
}
catch(OleDbException ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
}
现在,当我运行该代码,关闭应用程序并再次运行应用程序时,更改的内容会正确显示在连接到数据库的datagridview中,但是当我查看实际数据库时,没有任何更改所有。我不知道为什么会这样。
我的sql更新更新数据库,该数据库连接到数据网格视图。 Sow HOW是数据网格视图显示正确的数据而不是数据库本身。
编辑: 我之前没有使用sql的经验。
编辑: 交易代码:
string updateCommandString = "UPDATE RoomsTable SET [Date Checked]=@checkedDate WHERE ID = @id";
using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\users\spreston\documents\visual studio 2012\Projects\roomChecksProgram\roomChecksProgram\roomsBase.accdb"))
{
OleDbTransaction transaction = null;
using (OleDbCommand updateCommand = new OleDbCommand())
{
updateCommand.Connection = conn;
updateCommand.Transaction = transaction;
updateCommand.CommandText = updateCommandString;
updateCommand.CommandType = CommandType.Text;
updateCommand.Parameters.AddWithValue("@checkedDate", this.dateTimePicker1.Value.ToShortDateString());
updateCommand.Parameters.AddWithValue("@id", row.roomID);
try
{
conn.Open();
transaction = conn.BeginTransaction();
updateCommand.ExecuteNonQuery();
transaction.Commit();
conn.Close();
conn.Dispose();
}
catch(OleDbException ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
}
答案 0 :(得分:1)
可能的原因:
答案 1 :(得分:0)
听起来你可能对我有交易隔离问题。如果您不熟悉此主题,建议您google&阅读文档。我相信READ COMMITTED是默认设置...将其设置为READ UNCOMMITTED可能会修复您无法查看更新的问题。但是,这不是一种真正推荐的方法。通常,您只需要确保在尝试检查信息之前将所有事务都提交到数据库。
附加说明:在测试应用程序时,我不时需要能够从应用程序外部的SQL工具查询数据库以检查某些内容。但是,在开发数据库应用程序的近15年中,我从未需要将其设置为READ UNCOMMITTED用于生产。除了READ COMMITTED之外,我会非常谨慎地进行生产。我不是说从来没有一个你需要的东西,但这不是常态(恕我直言)。