rainbowzc

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::

郁闷了两天,怎么调试就是不对~~

使用ADO.net将使用于SQL Sever的程序移植到单机的Access数据库里老是发生异常,提示OleDataException,说是缺少一个参数~~莫非是system.data.oleDb和system.data.sqlclient中实现数据更新的方法不一致??试了用Command来代替InsertCommand实现也是发生同样的错误~~

这两天一直在寻思这个问题,直到今天才在网络上找到了解决的方法,觉得有点不可思议~~在网络上看了看,也是学习ADO.net的人常犯的错误。所以写此日志,以提醒自己与各位路人切记切记~~

数据库:

    EmpID 字符串型

    Last    字符串型

    Dept 字符串型

    Salary 整型数值

实现在此数据库中加入新行的代码

string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=D:\我的文档\数据库文件\Bonus.mdb;";
            OleDbConnection connection = new OleDbConnection(strCon);
            string strEmplist = "SELECT * FROM EmpList";
            string strBonus = "SELECT * FROM Bonus";
            OleDbDataAdapter adEmplist = new OleDbDataAdapter(strEmplist, connection);
            OleDbDataAdapter adBonus = new OleDbDataAdapter(strBonus, connection);
            DataSet dataset = new DataSet("Emplist");
            DataTable emplist = new DataTable("emplist");
            DataTable bonus = new DataTable("bonus");
            try
            {
                connection.Open();
                adEmplist.SelectCommand = new OleDbCommand(strEmplist, connection);
              

                adEmplist.Fill(emplist);
                adBonus.Fill(bonus);
                dataset.Tables.Add(emplist);
                dataset.Tables.Add(bonus);
               

            }
            catch (SystemException e)
            {
                Console.WriteLine(e.Message.ToString());
            }
            DataRow row = emplist.NewRow();
            row["EmpID"] = "A005";
            row["Last"] = "Smith";
            row["Dept"] = "Marketing";
            row["salary"] = 5000;
            emplist.Rows.Add(row);
            try
            {
                adEmplist.InsertCommand = new OleDbCommand("insert into [EmpList]([EmpID],[Last],[Dept],[Salary]) VALUES('A060','Smith','Marketing','5000')", connection);
                adEmplist.InsertCommand.CommandType = CommandType.Text;

                Console.WriteLine(adEmplist.InsertCommand.CommandText);
               // adEmplist.InsertCommand.ExecuteNonQuery();
                adEmplist.Update(dataset.Tables["EmpList"]);

                Console.WriteLine("数据库更新成功");
                connection.Close();
            }
            catch (OleDbException e)
            {
                Console.WriteLine(e.Message.ToString());
            }

总结:在System.Data.oleDb 命名空间下使用SQL语句要在字段名与表名加“【】”

insert into [EmpList]([EmpID],[Last],[Dept],[Salary]) VALUES('A060','Smith','Marketing','5000')"nsert into [EmpList]([EmpID],[Last],[Dept],[Salary]) VALUES('A060','Smith','Marketing','5000')"

posted on 2013-12-17 20:45  ct  阅读(481)  评论(0编辑  收藏  举报