C#调用ADO的RecordSet.AddNew方法.

原创 2007年09月23日 14:39:00
 

HTML Tags and JavaScript tutorial



C#调用ADO的RecordSet.AddNew方法.




项目中使用WebService,使用C#编写,调用VB写的组件,VB组件使用ADO,其中有的方法是需要传递Recordset的,但是在C#中的Recordset.AddNew的方法与VB中的不同,这是由于C#没有默认的参数.
C#中的AddNew的方法原型为:AddNew(Object FieldList,Object ValueList),开始时被其参数明型糊涂了,以为要用Object数组,但是参数又不是数组的形式,能过在网上查询,终于找到了解决的办法,实现了与VB中相类似的实现.代码如下:
                prjCommon.c_I_ReceiveGoods rev=new prjCommon.c_I_ReceiveGoodsClass();
                object missing=System.Reflection.Missing.Value;
                rev.get_ICommon_Data().AddNew(missing,missing);
                rev.get_ICommon_Data().Fields[rev.ArticleNo].Value=rd.ArticleNo;
                rev.get_ICommon_Data().Fields[rev.ClassID].Value=rd.ClassID;
                rev.get_ICommon_Data().Fields[rev.DateTime].Value=rd.RevDateTime;
                rev.get_ICommon_Data().Fields[rev.IsProcessing].Value=Convert.ToInt32(rd.Processing);
                rev.get_ICommon_Data().Fields[rev.Length].Value=rd.Length;
                rev.get_ICommon_Data().Fields[rev.OperatorID].Value=rd.OperatorID;
                rev.get_ICommon_Data().Fields[rev.ORollNo].Value=rd.ORollNo;
                rev.get_ICommon_Data().Fields[rev.POrderID].Value=rd.POrderID;
                rev.get_ICommon_Data().Fields[rev.POrderItem].Value=rd.POrderItem;
                rev.get_ICommon_Data().Fields[rev.Qty].Value=rd.Qty;
                rev.get_ICommon_Data().Fields[rev.Width].Value=rd.Width;
                rev.get_ICommon_Data().Update(missing,missing);
其中get_ICommon_Data()就是Recordset.
最重要的地方就是object missing=System.Reflection.Missing.Value;这句.
附上在网上找到的资料:
Comment from drichards
Date: 01/13/2005 07:30AM PST
    Comment    
It turns out that either of those methods works if you take out the "Mode=Read;" from the connection open statement in my first code sample.  Otherwise the connection is read-only.
Here's the syntax for the various options:
            object rv = System.Reflection.Missing.Value;
            // Single insert...
            cxn.Execute("INSERT INTO Dimension (Dimension_Id, Dimension_Name) VALUES (22,'FIRST_NEW_DIM')", out ra, (int)ADODB.ExecuteOptionEnum.adExecuteNoRecords);
            // Prepared Command with parameters - you can keep setting new values for the params and calling execute again
            ADODB.Command cmd = new ADODB.CommandClass();
            cmd.ActiveConnection = cxn;
            string parmVal = "NEXT_NEW_DIM";
            cmd.CommandText = "INSERT INTO Dimension (Dimension_Id, Dimension_Name) VALUES (?, ?)";
            cmd.Prepared = true;
            cmd.Parameters.Append(cmd.CreateParameter("?_1", ADODB.DataTypeEnum.adInteger, ADODB.ParameterDirectionEnum.adParamInput, 4, 32));
            cmd.Parameters.Append(cmd.CreateParameter("?_2", ADODB.DataTypeEnum.adChar, ADODB.ParameterDirectionEnum.adParamInput, parmVal.Length, parmVal));
            cmd.Execute(out ra, ref rv, (int)ADODB.CommandTypeEnum.adCmdText + (int)ADODB.ExecuteOptionEnum.adExecuteNoRecords);
            // Use a Recordset...
            ADODB.Recordset rsta = new ADODB.RecordsetClass();
            rsta.Open("Dimension", cxn, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic, (int)ADODB.CommandTypeEnum.adCmdTable);
            object missing = System.Reflection.Missing.Value;
            rsta.AddNew(missing, missing);
            rsta.Fields[0].Value = 27;
            rsta.Fields[1].Value = "NEW_DIM";
            rsta.Update(missing, missing);
            // Or use single Update from example in my previous post.
 


Access 2003 中ADO Recordset 调用 AddNew 或 Delete 方法时收到错误信息

有网友问到这个问题,他在代码里创建了一个ADODB.Recordset 对象,然后Open,当他想调用AddNew 方法时,程序报错误代码3251“对象或提供者不能执行所需的操作” 。这个问题在微软的...
  • gracexu
  • gracexu
  • 2008年03月07日 17:29
  • 3612

C#使用Ado.Net读写数据库

记性不好,记几个C#读取显示数据库资料的方式,以便随时取用   try { String connStr = Confi...
  • gyming
  • gyming
  • 2013年12月24日 17:26
  • 12652

使用相对路径导入ado库的方法

作者:朱金灿来源:http://blog.csdn.net/clever101             常用的导入ado库的语句:#import "c:\program files\common fi...
  • clever101
  • clever101
  • 2013年11月22日 15:02
  • 3895

ado使用方法

一、直接使用控件: 就是普通的OCX控件操作,简单的要命。首先选中菜单Project->Add To Project->Components And Control…,在对话框中选中Register...
  • THISISPAN
  • THISISPAN
  • 2012年03月30日 16:17
  • 2290

MFC---ADO 调用存储过程

界面: 存储过程:/* 话务统计信息查询。通过用户选定的小区(cellid),开始时间(startTime), 结束时间(endTime), 计算得到小时级话务量(avgTraff),小时级拥塞率(...
  • u012319493
  • u012319493
  • 2016年01月20日 20:41
  • 1131

C#入门8.1——方法的声明及调用(1)

方法为什么会存在? 迄今看到的代码块都是单个代码块形式实现的,其中包含一些重复执行的循环代码以及有条件的执行的分支语句。如果要对数据执行某种操作,就应把所需要的代码放在合适的位置。 如果有大量重复性操...
  • QPC908694753
  • QPC908694753
  • 2016年08月14日 11:41
  • 810

C#中子类调用父类的实现方法

本文实例讲述了C#中实现子类调用父类的方法,分享给大家供大家参考之用。具体方法如下: 一、通过子类无参构造函数创建子类实例 创建父类Person和子类Student。 ? 1 ...
  • cxcalm
  • cxcalm
  • 2015年10月14日 15:39
  • 4438

C# ADO操作Access数据库

C#操作Access数据库,包括创建数据库,创建表,设置主键,增加数据,查询数据的操作! 实例代码下载:http://download.csdn.net/detail/qq_23992597/9520...
  • qq_23992597
  • qq_23992597
  • 2016年05月16日 11:04
  • 1200

C#调用父类的父类的方法

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 04:11
  • 193

在ADO中如何调用存储过程

请见此篇文章      http://blog.csdn.net/hanxuemin12345/article/details/8620425   (三层架构——存储过程(在ADO.net中调用存储过...
  • hanxuemin12345
  • hanxuemin12345
  • 2013年02月22日 12:41
  • 1165
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#调用ADO的RecordSet.AddNew方法.
举报原因:
原因补充:

(最多只允许输入30个字)