【问题标题】:How to Insert or Update table in C# with MS Access Database如何使用 MS Access 数据库在 C# 中插入或更新表
【发布时间】:2014-10-25 17:39:05
【问题描述】:

我使用的是 SQL Server 数据库,然后我将 SQL 数据库导出到 MS Access 并在 C# 项目中使用该数据库。

现在,当我尝试在任何表中插入或更新数据时,它会给出有关错误查询的错误消息。这是“INSERT INTO 语句中的语法错误。”

我在 C# 中的查询是:

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Engr. Mac\Documents\Visual Studio 2012\Projects\SGM\SGM\SGdb.mdb");
OleDbCommand com = new OleDbCommand("", con);
con.Open();

com.CommandText = "INSERT INTO newOrder (Order_No, Customer_No, Issue_Date, Delivery_Date, Order_Type,Total_Weight) Values('" + orderbol.OrderNo + "', '" + orderbol.CustomerN0 + "', '" + orderbol.IssueDate + "', '" + orderbol.DlvryDate + "', '" + orderbol.OrdrType + "','"+0+"')";
if(com.ExecuteNonQuery()>0)
{
    con.Close();
    return true;
}

【问题讨论】:

  • 如果您使用 SQL 参数,您的问题很可能会消失;请参阅:stackoverflow.com/a/15346322/1070452 很难在 SO 中搜索不包含 SQLparams 的 SQL 答案。
  • 我在查询中也使用了sql参数,但是没有用
  • 尝试在日期字段周围加上“#”,例如:“VALUES (#'" + orderbol.IssueDate + "'#)"

标签: c# ms-access-2007 oledb


【解决方案1】:

最好使用命令参数而不是连接字符串,您可以在此处找到示例:

http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparameter(v=vs.110).aspx

但是,请尝试在您的示例中添加以下内容:

com.CommandText = "INSERT INTO newOrder (Order_No, Customer_No, Issue_Date, Delivery_Date, Order_Type,Total_Weight) Values(@1,@2,@3,@4,@5,@6);";
        com.Parameters.Add("@Order_No", OleDbType.Char, 1).Value = "1";
        com.Parameters.Add("@Customer_No", OleDbType.Char, 1).Value = "2";
        com.Parameters.Add("@Issue_Date", OleDbType.Char, 1).Value = "3";
        com.Parameters.Add("@Delivery_Date", OleDbType.Char, 1).Value = "4";
        com.Parameters.Add("@Order_Type", OleDbType.Char, 1).Value = "5";
        com.Parameters.Add("@Total_Weight", OleDbType.Char, 1).Value = "6";

并更改每个参数的数据类型

【讨论】:

    【解决方案2】:

    这一直对我有用。
    对于db,我将它放在我的应用程序的同一目录中,但您的可能会有所不同,因此只需根据您的设置更改db 的值即可。
    至于sql语句,我只是举了一个简单的例子供你学习,根据你的表格列替换sql语句以及代码cmd.Parameters.AddWithValue的部分,因为在下面的示例代码中,我使用的是fruit 表只有两列,id 列是自动递增的,fruitname 列是水果名称。

    string db = Application.StartupPath + "\\Database1.accdb";
    string cs = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + db;
    OleDbConnection c = new OleDbConnection(cs);
    
    try
    {
        c.Open();
    
        string s = "insert into fruit (fruitname) values (@fruitname)";
        using (OleDbCommand cmd = new OleDbCommand(s, c))
        {
            cmd.Parameters.AddWithValue("@fruitname", textBox1.Text.Trim());
            cmd.ExecuteNonQuery();
        }
    }
    catch (Exception)
    {
        throw;
    }
    finally
    {
        c.Close();
    }
    

    【讨论】:

      【解决方案3】:

      //插入例子

      string _filename = @"C:\Automation\file.xls";

                 _conn = "Provider=Microsoft.Ace.OLEDB.12.0;" + @"Data Source=" + _filename4 + ";" + "Extended Properties=Excel 8.0;";
                  _connection = new System.Data.OleDb.OleDbConnection(_conn);
      
                  // Use OledbCommand object to select all the data from sheet1 and execute a ExecuteNonQuery to import data into Book.mdb.
      
                  _command = new System.Data.OleDb.OleDbCommand();
      
                  _command.Connection = _connection;
      
                  _command.CommandText = @"insert into [MS Access;Database=C:\Automation\file1.accdb].[tab1] select [f1],[f2],[f3],[f4] FROM [Sheet0$]";
      
                  _connection.Open();
      
                  _command.ExecuteNonQuery();
      
                  _connection.Close();
      

      //更新示例

                  connstr = "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=C:\\Automation\\IPR\\ipr.accdb";
                  conn = new System.Data.OleDb.OleDbConnection(connstr);
                  cmdBulk = new System.Data.OleDb.OleDbCommand("update tab1,tab2 set tab1.f1 = tab2.f2 where tab1.f2 = tab2.f3", conn);
                  conn.Open();
                  cmdBulk.ExecuteNonQuery();
                  conn.Close();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-20
        • 1970-01-01
        • 1970-01-01
        • 2011-09-06
        • 2017-08-18
        相关资源
        最近更新 更多