7月的误会(1)

本来也许没那么容易产生误会,全因为偶的一个问题。
偶那天想要获取一个库所有的表名,可是一个异常出现,我觉得有些个费解。预先查询了不少的资料以后,想问问前些日子翻blog 翻到的mvm同志。相信能确认一下子答案。结果...发生了小插曲。

第一幕act 1

获取表名这个问题实在是不好回答。
在delphi 中很好办
TADOConnection.GetTableNames(List: TStrings; SystemTables: Boolean = False);
可是.Net 中呢?我找了几天还是没有找到好的办法。

问了一下mvm回答我两个办法

>(1) syntax
>SQL = "SELECT Name FROM MSysObjects WHERE (Name Not Like 'MSys*') AND
>(Type=1 Or Type=6);"
>.Open SQL , db, adOpenDynamic
>
>I forgot to put in the connection & cursor

我对这个方法是尝试过的,在access中建立查询可以,但是在asp.net 或者delphi 应
用中均出现权限不足的问题。

MVM的答复是
在asp.net中无法运行,多半是因为权限问题。要么可以把asp.net的运行账号(在
win2k和win2003中不一样的)放到administrators组里面,或者可以在asp.net里面用
impersonate把asp.net的工作进程的权限升上去。
以前我在asp.net里面调用wmi也遇到类似的问题的,用impersonate把权限升上去就好
了。

我却不大了解这个impersonate,因为没有时间尝试。所以还没有试验。项目也不会同意修改权限。


>(2)
>found the answer in MSDN....look for "OpenSchema Method" Works like a charm
>
>Public Sub OpenSchemaX()
>
>   Dim cnn1 As ADODB.Connection
>   Dim rstSchema As ADODB.Recordset
>   Dim strCnn As String
>
>   Set cnn1 = New ADODB.Connection
>      strCnn = "Provider=sqloledb;" & _
>      "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
>   cnn1.Open strCnn
>
>   Set rstSchema = cnn1.OpenSchema(adSchemaTables)
>
>   Do Until rstSchema.EOF
>      Debug.Print "Table name: " & _
>         rstSchema!TABLE_NAME & vbCr & _
>         "Table type: " & rstSchema!TABLE_TYPE & vbCr
>      rstSchema.MoveNext
>   Loop
>   rstSchema.Close
>
>   cnn1.Close
>
>End Sub

这是来自msdn 的方法,我找到类似的几个。mvm提供的方法我观察好像是vb 而非.net的方法?
VB.Net中能用不?
该方法来自
(ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052
/ado270/htm/mdaexamples_vb02_9.htm)?

.net中
而我找的第三种方法
(ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html
/frlrfSystemDataOleDbOleDbConnectionClassGetOleDbSchemaTableTopic.htm)
也不对。
        constr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=0712.mdb;User
Id=Admin;Password=;Jet OLEDB:Database Password=xxxxxx;"
        Dim oldCon As OleDbConnection _
   = New OleDbConnection(constr)
        Dim oleAd As OleDbDataAdapter = New OleDbDataAdapter
  'some operate here

        Dim schemaTable As DataTable = New DataTable
        Try
            schemaTable = oldCon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
New Object() {Nothing, Nothing, Nothing, "TABLE"})
        Catch ex As Exception
            System.Diagnostics.Debug.Write(ex.Message)
        End Try

结果是 System.InvalidOperationException
ex.Message = "无效操作。连接被关闭。"

我用的是OleDbConnection
最后还是没办法用,不知道那个adodb在.Net中还有么?
时间紧,有时间在继续研究哈。

结果不想,这个小小的问题中下了隐患。欲知后事请看下文

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值