今天被MSDN郁闷了一回。。 因为有个Oracle的项目要做,需要导出数据结构,在SQL或者ACCESS下直接用ODBCConnection.GetSchema就没问题了,但这回需要用OracleConnection,两个东东用起来还是有差别的。先惟有查查资料。。
不知道是我的机器问题还是怎么回事,上MSDN查找OracleConnection.GetSchema 的时候浏览器总是死翘翘的,最终也只得利用baidu的cache来看该页的内容。 http://msdn2.microsoft.com/zh-cn/library/ms136141(VS.80).aspx 上面是这么写的:
restrictionValues 参数可以为一个特定集合提供由限制集合指定的 n 层深的值。为了在给定限制上设置值,并且不设置其他限制的值,您需要将前置限制设置为空,然后为您想指定值的限制设置相应的值。
例如,对于“Tables”集合,如果“Tables”集合有 3 个限制:数据库、所有者和表名,并且您想只返回与所有者“Carl”关联的表,则您需要传入下列值(至少):null、“Carl”。如果没有传入限制值,则使用该限制的默认值。这与传入 null 是相同的映射,但不同于为参数值传入空字符串的情况。在这种情况下,空字符串 ("") 被认为是指定参数的值。
当我按他所说的用三个个限制,根本就不是那回事……而且超过了两个限制会报错! 终于意识到,自己被MSDN忽悠了!没办法,“马死落地行”,只能靠自己了。经过多次反复的实践,终于把答案弄出来了! OracleConnection.GetSchema 的restrictionValues 只有两个值:{ OWNER ,TABLE_NAME }
有些时候还是不能迷信官方资料,自己实践出来的才是王道!
评论 (6)
水边
2008-01-21 06:49OracleConnection.GetSchema("Tables")\r 就OK了,你为什么非要加限制呢?
阳光游子
2008-06-14 14:31不错,很感谢,我也是被忽悠的一个,你帮我解决了,呵呵 另外回楼上的,多加一个限制是为了过滤数据,比如我不想把系统表也取出来,Oracle的系统表,好多啊
fiei
2008-08-09 05:47Dim instance As New SqlConnection("server=localhost;database=northwind;integrated security=true")\r \r Dim collectionName As String\r Dim restrictionValues As String()\r Dim returnValue As DataTable\r instance.Open()\r returnValue = instance.GetSchema(collectionName, restrictionValues)\r \r 以下两值该如何写???\r collectionName----\r \r restrictionValues----
BIDAAS
2009-02-17 02:38我是要查询存储过程名称,并把这些存储过程的架构查询出来,生成调用的Client代码,你帮我解决了这个问题,谢谢
hust
2009-08-03 02:25我的加两个参数的限制为什么不行呢?
chyo
2011-07-25 04:47我也遇到同样的问题, 谢谢的实践,帮我解决了这个问题。