在 C# 中使用 oledb 更新数据

Posted

技术标签:

【中文标题】在 C# 中使用 oledb 更新数据【英文标题】:update data using oledb in c# 【发布时间】:2015-04-09 09:27:30 【问题描述】:

我使用 c# 和使用 access accdb 的数据库创建了一个项目,并在它们之间进行了连接。我做了2个按钮,第一个是添加新客户,效果很好,第二个是更新客户的数据(名字和姓氏),由于某种原因,更新按钮不起作用,当没有错误时我运行了这个项目,但是点击之后什么都没有发生......

private void button2_Click(object sender, EventArgs e)

    connect.Open();
    string cid = textBox1.Text;
    string cfname = textBox2.Text;
    string clname = textBox3.Text;
    OleDbCommand command = new OleDbCommand();
    command.Connection = connect;
    command.CommandText = "UPDATE Tcostumers SET cfname= " + cfname + "clname= " + clname + " WHERE cid = " + cid;
    if (connect.State == ConnectionState.Open)
    
        try
        
            command.ExecuteNonQuery();
            MessageBox.Show("DATA UPDATED");
            connect.Close();
        
        catch (Exception expe)
        
            MessageBox.Show(expe.Source);
            connect.Close();
        
    
    else
    
        MessageBox.Show("ERROR");
    

【问题讨论】:

你的button1_Click代码除了查询之外是一样的吗? 【参考方案1】:

我相信你的命令文本是问题所在;

command.CommandText = "UPDATE Tcostumers SET cfname= " + cfname + "clname= " + clname + " WHERE cid = " + cid;

您需要在集合语句之间使用逗号,并且正如 Gino 指出的语音标记一样。

编辑:

这比你为你的变量使用参数要好,你当前的方法对 SQL 注入是开放的,例如。

    private void button2_Click(object sender, EventArgs e)
    
        OleDbCommand command = new OleDbCommand(@"UPDATE Tcostumers
                                                    SET cfname = @CFName,
                                                        clname = @CLName
                                                    WHERE cid = @CID", connect);

        command.Parameters.AddWithValue("@CFName", textBox2.Text);
        command.Parameters.AddWithValue("@CLName", textBox3.Text);
        command.Parameters.AddWithValue("@CID", textBox1.Text);

        try
        
            connect.Open();
        
        catch (Exception expe)
        
            MessageBox.Show(expe.Source);
        
        try
        
            command.ExecuteNonQuery();

            MessageBox.Show("DATA UPDATED");
        
        catch (Exception expe)
        
            MessageBox.Show(expe.Source);
        
        finally
        
            connect.Close();
        
    

我倾向于用它来格式化我的代码,所以你可以用它来做。希望对您有所帮助。

【讨论】:

【参考方案2】:

这可能是一件愚蠢的事情,但是...... 您正在更新字符串而不是整数,因此请尝试将 '' 添加到您的字符串中,例如:

command.CommandText = "UPDATE Tcostumers SET cfname= '" + cfname + "' clname='" + clname + "' WHERE cid = " + cid;

【讨论】:

【参考方案3】:
//my sample code for edit/update 
Table Name = StudentFIle
Fields = id,fname,lname

bool found = false;
OleDbConnection BOMHConnection = new OleDbConnection(connect);
string sql = "SELECT * FROM StudentFIle";
BOMHConnection.Open();
OleDbCommand mrNoCommand = new OleDbCommand(sql, BOMHConnection);
OleDbDataReader mrNoReader = mrNoCommand.ExecuteReader();
while (mrNoReader.Read())

    if (mrNoReader["id"].ToString().ToUpper().Trim() == idtextbox.Text.Trim())
    
        mrNoReader.Close();
        string query = "UPDATE StudentFIle set fname='" +firstnametextbox.Text+ "',lname='"+lastnametextbox.Text+"' where id="+idtextbox.Text+" ";
        mrNoCommand.CommandText = query;
        mrNoCommand.ExecuteNonQuery();
        MessageBox.Show("Successfully Updated");

        found = true;
        break;
    
    continue;

if (found == false)

    MessageBox.Show("Id Doesn't Exist !.. ");
    mrNoReader.Close();
    BOMHConnection.Close();
    idtextbox.Focus();

【讨论】:

以上是关于在 C# 中使用 oledb 更新数据的主要内容,如果未能解决你的问题,请参考以下文章

C#如何通过OleDb更新Excel中的数据

从对多个数据网格的更改更新本地存储的数据库(Visual Studio C#,使用 OLEDB 的 Access 数据库)

使用 c# 和 oledb 查询更新 Ms-Access 2010 中的列值

使用 c# 将数据更新到 Excel 工作表中

使用 Access 数据库在 C# 中更新

使用 Decimal 参数的数据类型不匹配 - OleDb、C#、Access