做个代码收集的小程序。对Access数据库CRUD时,U不正常不太会表达,先看代码吧插入方法            string sql = "Insert Into DataInfo(title,context,typeId,createTime)"+
                         " Values(@title,@context,@typeId,@createTime)";
            OleDbParameter[] ps ={
                new OleDbParameter("@title",dataInfo.Title),
                //...
                };
            return DBHelper.ExecuteCommand(sql, ps);
可以正确执行更新方法1            string sql = "Update DataInfo Set title=@title,context=@context,"+
                         "typeId=@typeId,createTime=@createTime Where id=@id ";
            OleDbParameter[] ps ={
                new OleDbParameter("@id",dataInfo.Id),
                //...
                };
            return DBHelper.ExecuteCommand(sql, ps);
不能正确执行
更新方法2            string sql = "Update DataInfo Set title='" + dataInfo.Title +
                "',context='" + dataInfo.Context + "',typeId=" + dataInfo.TypeId.Id +
                ",createTime='" + dataInfo.CreateTime + "' Where id=" + dataInfo.Id;            return DBHelper.ExecuteCommand(sql, null);
可以正确执行,但是数据中不能包含一些特定的字符,比如英文单引号
比如 
...Set title='"123"'...  --可以执行更新
...Set title='"123'"'... --不可以执行更新因为插入使用参数方式
所以插入title为123'时可以插入
根据title查询时也可以查出来
Update可以用OleDbParameter方式吗?如果可以怎么才能正确使用?使用拼接sql串时怎么避免下面这种情况出错?
...Set title='"123'"'...
在线等带您的指教

解决方案 »

  1.   

    Access里的 Parameters 要注意顺序
      

  2.   

    真快,谢谢。
    就和java中的Result一样?必须按照列顺序读取/更新?
      

  3.   

    access这个对顺序有要求,一一对应!!
      

  4.   

    明白了你是说这样            string sql = "Update DataInfo Set title=@title,context=@context,"+
                          "typeId=@typeId,createTime=@createTime Where id=@id ";
                OleDbParameter[] ps ={
                    new OleDbParameter("@id",dataInfo.Id),//要放在最后?
                    new OleDbParameter("@title",dataInfo.Title),
                    new OleDbParameter("@context",dataInfo.Context),
                    new OleDbParameter("@typeId",dataInfo.TypeId.Id),
                    new OleDbParameter("@createTime",dataInfo.CreateTime)};
                return DBHelper.ExecuteCommand(sql, ps);
      

  5.   

    把你一些sql的关键字用[id]括起来!
      

  6.   

    谢谢您的提醒,不过这是用CodeSmith生成的,关键字会自动做处理的。