sql update query不更新数据库

时间:2012-09-30 17:21:15

标签: c# ms-access datagridview ado.net

我正在编写一个更新我创建的数据库的应用程序。应用程序上有一个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());
                            }
                        }
                    }

2 个答案:

答案 0 :(得分:1)

可能的原因:

  1. 您的应用程序可能会连接到数据库文件的副本。在项目目录中搜索数据库副本(.accdb扩展名?)
  2. 也许David S是对的,但您必须对数据库(OleDbTransaction help at MSDN)进行更改。将隔离设置更改为READ UNCOMMITTED是解决问题的优雅方法。

答案 1 :(得分:0)

听起来你可能对我有交易隔离问题。如果您不熟悉此主题,建议您google&阅读文档。我相信READ COMMITTED是默认设置...将其设置为READ UNCOMMITTED可能会修复您无法查看更新的问题。但是,这不是一种真正推荐的方法。通常,您只需要确保在尝试检查信息之前将所有事务都提交到数据库。

附加说明:在测试应用程序时,我不时需要能够从应用程序外部的SQL工具查询数据库以检查某些内容。但是,在开发数据库应用程序的近15年中,我从未需要将其设置为READ UNCOMMITTED用于生产。除了READ COMMITTED之外,我会非常谨慎地进行生产。我不是说从来没有一个你需要的东西,但这不是常态(恕我直言)。