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 insertdot.gif
            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 Recordsetdot.gif
            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.

转载于:https://www.cnblogs.com/fxwdl/archive/2006/08/08/471259.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值