更新 SQL 命令 C#

3
我正在尝试使用C#编程语言更新数据库。下面是连接到数据库并尝试更新“RoomsTable”表中“date”列的代码。代码看起来没问题,但数据库没有发生任何变化。
updateConnection = new System.Data.OleDb.OleDbConnection();
updateConnection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\users\spreston\documents\visual studio 2012\Projects\roomChecksProgram\roomChecksProgram\roomsBase.accdb";
updateConnection.Open();

MessageBox.Show("Connected");

string updateCommand = "UPDATE RoomsTable SET Date Checked='9/27/2012'";
updateAdapter = new OleDbDataAdapter(updateCommand, updateConnection);

updateConnection.Close();
updateConnection.Dispose();

我不知道为什么它不能工作。在我看来,所有东西都在那里。


4
你需要运行一个execute()方法。 - juergen d
2个回答

9

使用 OleDBCommand

string updateCommand = "UPDATE RoomsTable SET [Date Checked]='9/27/2012'";
updateCommand = new OleDbCommand(updateCommand, updateConnection);

updateCommand.ExecuteNonQuery();
updateConnection.Close();

也许你可以使用“Using语句”来重构代码,并对查询进行参数化。并且列名“Date Checked”应该用括号进行转义。
string updateCommand = "UPDATE RoomsTable SET [Date Checked]=@checkedDate WHERE ID = @id"; // '9/27/2012'
using (OleDbConnection conn = new OleDbConnection("connectionStringHERE"))
{
    using (OleDbCommand comm = new OleDbCommand())
    {
        comm.Connection = conn;
        comm.CommandText = updateCommand;
        comm.CommandType = CommandType.Text
        comm.Parameters.AddWithValue("@checkedDate", this.dateTimePicker1.Value)
        comm.Parameters.AddWithValue("@id", row.roomID);
        try
        {
            comm.Open();
            conn.ExecuteNonQuery();
        }
        catch(OleDbException ex)
        {
            MessageBox.Show(ex.Message.ToString());
        }
    }
}

我尝试了你的方法,但是出现了错误(“无法隐式转换类型'System.Data.OleDB.OleDBCommand'为字符串”)和(“字符串不包含“ExecuteNonQuery”的定义”)。 - Stonep123
@Stonep123,这个9/27/2012是从哪里来的? - John Woo
最终我想将它插入到特定的记录中,根据ID号。但我只是想尝试并更新任何内容。 - Stonep123
我们无法在聊天中继续,因为您的声望不够。无论如何,您是否刷新了数据库?或者连接点是否正确连接到数据库? - John Woo
它指向正确的数据库。我的意思是,SQL查询更新了连接字符串中的数据库,并且连接字符串中的数据库是连接到我的数据网格视图的数据库,并且在数据网格视图中正确显示,因此必须是正确的。我该如何刷新数据库? - Stonep123
显示剩余11条评论

0

你必须写这个:

updateConnection = new System.Data.OleDb.OleDbConnection();
updateConnection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\users\spreston\documents\visual studio 2012\Projects\roomChecksProgram\roomChecksProgram\roomsBase.accdb";

updateConnection.Open();

MessageBox.Show("Connected");

string updateCommand = "UPDATE RoomsTable SET Date Checked= '"+9/27/2012+"' ";

updateAdapter = new OleDbDataAdapter(updateCommand, updateConnection);

updateConnection.Close();
updateConnection.Dispose();

始终在查询中使用参数以避免 SQL 注入。你的 updateCommand 字符串并不是你想象中的那样。 - LarsTech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接