CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VC.NET

火大了,紧急求救,关于用AdoX创建主键的问题。

楼主Wen_Wen__Zi()2006-07-03 14:44:32 在 .NET技术 / VC.NET 提问

由于使用ADO(非DotNet)时涉及大量的try语句和指针创建问题,小弟近日努力尝试自己包装一个具有基本功能的数据库类。  
  在编写一个根据现有的table在新文件创建一个完全相同的table的函数时遇到了问题:  
   
  调用_TablePtr::Keys::Append(   const   _variant_t   &   Item,   enum   KeyTypeEnum   Type,   const   _variant_t   &   Column,   _bstr_t   RelatedTable,   _bstr_t   RelatedColumn   )这个方法时,第一个参数Item只可以用_bstr_t传递字符串,当赋以一个转换为(_variant_t)(IDispatch   *)的_KeysPtr对象会发生异常。  
  这样的话我就只可以创建以类型为_bstr_t的第三个参数Column为列名的主键,无法创建由多列构成的主键。  
  微软关于ADOX的帮助内容如下:  
   
  语法  
  Keys.Append   Key   [,   KeyType]   [,   Column]   [,   RelatedTable]   [,   RelatedColumn]  
  参数  
  Key    
  要追加的   Key   对象或要创建并追加的键的名称。    
  KeyType    
  可选。Long   值,指定键的类型。Key   参数对应于   Key   对象   Type   属性。    
  Column    
  可选。String   值,指定要索引的列的名称。Columns   参数对应于   Column   对象的   Name   属性的值。    
  RelatedTable    
  可选。String   值,指定相关表的名称。RelatedTable   参数对应于   Table   对象的   Name   属性的值。    
  RelatedColumn    
  可选。String   值,指定外键的相关列的名称。RelatedColumn   参数对应于   Column   对象的   Name   属性的值。    
  说明  
  Columns   参数可使用列名或列名的数组。  
   
  由上述说明可见,key应可为键名或Key对象,这也在微软提供的VB代码中得到证明:'   BeginCreateKeyVB  
  Sub   Main()  
          On   Error   GoTo   CreateKeyError  
   
          Dim   kyForeign   As   New   ADOX.Key  
          Dim   cat   As   New   ADOX.Catalog  
   
          '   Connect   the   catalog  
          cat.ActiveConnection   =   "Provider='Microsoft.Jet.OLEDB.4.0';"   &   _  
                  "Data   Source='c:\Program   Files\Microsoft   Office\"   &   _  
                  "Office\Samples\Northwind.mdb';"  
           
          '   Define   the   foreign   key  
          kyForeign.Name   =   "CustOrder"  
          kyForeign.Type   =   adKeyForeign  
          kyForeign.RelatedTable   =   "Customers"  
          kyForeign.Columns.Append   "CustomerId"  
          kyForeign.Columns("CustomerId").RelatedColumn   =   "CustomerId"  
          kyForeign.UpdateRule   =   adRICascade  
           
          '   Append   the   foreign   key  
          cat.Tables("Orders").Keys.Append   kyForeign  
           
          'Delete   the   Key   as   this   is   a   demonstration  
          cat.Tables("Orders").Keys.Delete   kyForeign.Name  
           
          'Clean   up  
          Set   cat.ActiveConnection   =   Nothing  
          Set   cat   =   Nothing  
          Set   kyForeign   =   Nothing  
          Exit   Sub  
           
  CreateKeyError:  
          Set   cat   =   Nothing  
          Set   kyForeign   =   Nothing  
           
          If   Err   <>   0   Then  
                  MsgBox   Err.Source   &   "-->"   &   Err.Description,   ,   "Error"  
          End   If  
           
  End   Sub  
  '   EndCreateKeyVB  
   
  但是在VC中我却无法找到方法作相同的实现,而帮助最后提到的“Columns   参数可使用列名或列名的数组”则更令我奇怪,如何用_variant_t包含文字数组?望各位高手不吝赐教。  
   
  问题点数:100、回复次数:5Top

1 楼Wen_Wen__Zi()回复于 2006-07-03 15:01:23 得分 0

气死我了垃圾MS不是说vc的功能最强大的吗?连ADO的示例代码都是用VB写的,VC还实现不了,我靠!!!!!!!Top

2 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-07-04 06:37:07 得分 100

http://blog.csdn.net/jiangsheng/archive/2004/03/15/3799.aspxTop

3 楼Wen_Wen__Zi()回复于 2006-07-04 08:57:48 得分 0

谢谢楼上。  
  按照你的写法,似乎主索引等价于主键?我对数据库的底层不是很了解哦。  
  我现在试试按你的写法行不行,大家还有什么好意见尽管提出来哦。  
  Top

4 楼Wen_Wen__Zi()回复于 2006-07-04 09:29:29 得分 0

经过实践,蒋晟老师的方法完全可行,主键似乎就是一种特殊的索引.  
   
  还有一个小小的问题,为什么要给用完的ado指针赋NULL值呢?Top

5 楼Wen_Wen__Zi()回复于 2006-07-04 11:56:00 得分 0

感谢帮忙,此贴保留一早上今晚结贴..Top

相关问题

关键词

得分解答快速导航

  • 帖主:Wen_Wen__Zi
  • jiangsheng

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo