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

Posted

技术标签:

【中文标题】使用 c# 和 oledb 查询更新 Ms-Access 2010 中的列值【英文标题】:updating column value in Ms-Access 2010 using c# and oledb query 【发布时间】:2013-09-12 06:47:27 【问题描述】:

我正在努力更新 MS-ACCESS 数据库中的记录/列值...非常感谢您的帮助..!

我正在使用 Datagridview 显示从 Ms-access 中的表中检索到的部件号列表,我应该在其中更新/更改部件号。 (“partno”是我的 datagridview 的第三列。)

但我无法更新数据库中的单个记录..没有例外..一切都很好。!

但是没有行被影响!

这是我的代码:

 private void UpdateDetails_Click(object sender, EventArgs e)
 
      try
      
          con = new OleDbConnection();
          con.ConnectionString = Helper.MyConnectionString;
          con.Open();

          for (int i = 0; i <= datagridview1.Rows.Count-1; i++)
          
             int j = i + 1; // j is the serial number corresponding to partnumber

             string partno = dgv1.Rows[i].Cells[2].Value.ToString(); //getting part number from Datagridview

             String partquery = "";

             if (partno == null || partno == "") //checking whether part number updated or not
             
                 partquery = "update Vendor SET PartNo=NULL where Vendor.Sno=" + j + " ";
             
             else           
                 partquery = "update Vendor SET PartNo='" + partno + "' where Vendor.Sno=" + j + " ";

             //Vendor is the table name containg 'partno' list

             cmd = new OleDbCommand();
             cmd.Connection = con;
             cmd.CommandType = CommandType.Text;
             cmd.CommandText = partquery;
             cmd.ExecuteNonQuery();
          
      
      catch(Exception ex)
          
        //exception handler
      


【问题讨论】:

使用parameterized sql 代替字符串连接。这种连接对SQL Injection 攻击开放。 我想这个链接会解决你的问题[1]:***.com/questions/4589348/… 感谢您的回复。!我也试过了..但没用..你能建议我参数化的sql代码sn-p..@Soner Gonul 我已经访问了那个链接..也试过了..仍然没有行影响..@ZubinAmit 【参考方案1】:

正如@Soner 建议的那样,您应该使用参数。像这样的东西。

修改了代码你做过这样的事情吗?

    private void UpdateDetails_Click(object sender, EventArgs e)
    
        try
        
            con = new OleDbConnection();
            con.ConnectionString = Helper.MyConnectionString;
            con.Open();

            for (int i = 0; i <= datagridview1.Rows.Count - 1; i++)
            
                int j = i + 1; // j is the serial number corresponding to partnumber

                string partno = dgv1.Rows[i].Cells[2].Value.ToString(); //getting part number from Datagridview

                //String partquery = "";

                //if (partno == null || partno == "") //checking whether part number updated or not
                //
                //    partquery = "update Vendor SET PartNo=NULL where Vendor.Sno=" + j + " ";
                //
                //else
                //    partquery = "update Vendor SET PartNo='" + partno + "' where Vendor.Sno=" + j + " ";

                OleDbCommand cmd = new System.Data.OleDb.OleDbCommand("update Vendor SET PartNo='@partno' where Vendor.Sno=@vndid");
                OleDbParameter parameter = new System.Data.OleDb.OleDbParameter("@partno", partno);
                cmd.Parameters.Add(parameter);
                parameter = new System.Data.OleDb.OleDbParameter("@vndid", j);
                cmd.Parameters.Add(parameter);


                cmd.Connection = con;
                cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();
            
        
        catch (Exception ex)
        
            //exception handler
        

    

【讨论】:

以上是关于使用 c# 和 oledb 查询更新 Ms-Access 2010 中的列值的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中使用 oledb 更新数据

从 C# 通过 OLEDB 执行更新时出错

使用 UPDATE 查询更新 OLEDB 数据库

如何在 C# 中使用 OleDB 列出 MS Access 文件中的所有查询?

C#通过OleDb查询Oracle存储过程

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