| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1502 人关注过本帖
标题:调用SQLDMO问题
只看楼主 加入收藏
半个星
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2011-4-22
结帖率:100%
收藏
 问题点数:0 回复次数:2 
调用SQLDMO问题
无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“SQLDMO.NameList”。此操作失败的原因是对 IID 为“{10022406-E260-11CF-AE68-00AA004A34D5}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 不支持此接口 (异常来自 HRESULT:0x80004002 (E_NOINTERFACE))。

SQLDMO.NameList serverList = sqlApp.ListAvailableSQLServers(); //这句报错

各位大虾知道怎么解决这个问题吗?
搜索更多相关主题的帖子: 接口 
2011-05-09 16:25
s0341969
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-6-26
收藏
得分:0 
您可以考慮看看我這篇文章
http://www.wretch.cc/blog/s0341969/33079698

最近遇到個新案子,要如何查詢區網內有多少SQL SERVER存在呢?
網上查了一下,SQL剛裝好時有個SQLDMO.dll。這個dll本身是一個COM對象,而你必須把它引用到你的.net項目中。IDE將會為使用這個庫創建必需的COM包裝(wrapper)。注意:如果你在你的程序中使用「using SQLDMO」聲明,你會得到一個錯誤。

看網路上大部分的用法都是調用DLL後,透過DLL取得區網內的SQL SERVER NAME

----------------程式範例--START-------------------

            SQLDMO.ApplicationClass SQLServer = new SQLDMO.ApplicationClass();
            SQLDMO.NameList strServerList = SQLServer.ListAvailableSQLServers();
            if (strServerList.Count > 0)
            {
                for (int i = 0; i < strServerList.Count; i++)
                {
                    toolStripTextBox1.Items.Add(strServerList.Item(i + 1));
                }
            }
----------------程式範例--END-------------------

不過如果夠過上述寫法會出現如下的錯誤訊息..

此操作失敗的原因是對 IID 為「{10022406-E260-11CF-AE68-00AA004A34D5}」的接口的 COM 組件調用  QueryInterface 因以下錯誤而失敗: 不支持此接口 (異常來自 HRESULT:0x80004002  (E_NOINTERFACE))。」
出錯語句:
SQLDMO.NameList xx= (SQLDMO.NameList)sqlApp.ListAvailableSQLServers()


 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
解決方法:
 由於用 SQLDMO在有些機器上報錯,這樣只能找C#中的類實現,在Sql命名空間下有個 SqlDataSourceEnumerator類,它的Instance屬性返回一個表。這個表中有一列是SQL服務器的名。
以下方法返回一個數組把它們放到toolStripTextBox1就可以了。
Using System.Data.Sql;
            SqlDataSourceEnumerator sqlServer = SqlDataSourceEnumerator.Instance;
            DataTable db = sqlServer.GetDataSources();
            string[] Name = new string[db.Rows.Count];
            for (int i = 0; i < db.Rows.Count; i++)
            {
                Name[i] = db.Rows[i][0].ToString() + db.Rows[i][1].ToString().Trim();
                toolStripTextBox1.Items.Add(Name[i]);
            }
2011-06-26 21:53
赵丹
Rank: 2
等 级:论坛游民
帖 子:5
专家分:16
注 册:2011-4-26
收藏
得分:0 
学习中~~~

[url=http://t./p/u/141487987]5万元创业项目[/url]
2011-06-27 14:17
快速回复:调用SQLDMO问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016611 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved