public class AccessDB
    {
            public enum HandleFlag { Insert, Delete, Update };
            //private String connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
            //        " Data Source= " + AppDomain.CurrentDomain.BaseDirectory +
            //        "\\Resources\\PrivateFinance.accdb";
            private OleDbConnection connection = null;
            private OleDbCommand command = null;
            int num = 0;            public AccessDB()
            { }            //增加access数据库的路径的构造函数
            private OleDbConnection BuildAccessDB(String Uri)
            {
                #region 打开连接,操纵数据库
                String connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" +
                    " Data Source= " + Uri + "Resources\\PrivateFinance.accdb";
                connection = new OleDbConnection(connectionString);
                try
                {
                    connection.Open();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
                return connection;
                #endregion            }            public void DBInsert(String str,String uri)
            #region 插入数据
            {
                connection = BuildAccessDB(uri);
                command = new OleDbCommand(str, connection);
                num = command.ExecuteNonQuery();
            }
            #endregion
     }
accessinsert into

解决方案 »

  1.   

    这段代码是用来连接access2007,和操作数据库的。
    现在的问题是,我在调用DBInsert方法时,会报错。就是command.ExecuteNonQuery()执行不成功,但是我的sql语句是正确的。请问是这段代码是哪里写错了?先多谢各位了。
      

  2.   

    这个代码问题严重啊,数据连接都没有关闭。具体的异常信息是什么呢?
    要么数据连接没成功打开,要么就是你的sql语句有错。自己查下。
      

  3.   

    应该是你的sql问题吧,你sql在access里面执行看看
      

  4.   

    dalmeeme,首先我要多谢你的回复。就你所说的问题,我检查了自己的代码:
    1、数据连接的关闭方法我放在了另一个方法里。
    2、sql语句我在access2007的查询界面中测试,是没有问题的。
    3、现在我在找数据连接没有成功打开的问题。
    异常信息如下:System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
    System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
    System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
    System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
    System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
    System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
    Dll.AccessDB.DBInsert(String str, String uri)
    System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
    System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
    System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
    System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
    System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
    System.Type.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args)
    DllTestProject.UnitTest1.TestMethod1()
      

  5.   

    先把BuildAccessDB方法里的try...catch...拿掉,看看报什么错。
      

  6.   

    各位我已经解决了该问题了。解决方法是 insert into [表名] …… 加上中括号就行了。只是不明白为什么要在代码的表名上加上[],因为我直接把没有中括号的语句在access上执行是可以执行的。
      

  7.   

    可能你的表名跟access的某个关键字冲突,不知道你的表名具体是什么。
      

  8.   

    是不是连接字符出问题了。
       String connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" +
                        " Data Source= " + Uri + "Resources\\PrivateFinance.accdb";Uri后面是否有\\这个如果没有 Resources前面 加 \\Resources  String connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" +
                        " Data Source= " + Uri + "\\Resources\\PrivateFinance.accdb";
      

  9.   

    表名为User。但是在access是可以直接执行的哦!
      

  10.   

    你用了系统用的名字了吧,别和系统抢名字用!
    user 还有很多都是系统用的名字的!
      

  11.   

    你要用SQL看看就很明显了,user是红色的是执行不了的