• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
项目中使用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, 432));
            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.

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#文件/文件夹压缩解压缩发布时间:2022-07-10
下一篇:
[书籍]用UWP复习《C#并发编程经典实例》发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap