2011-12-08 10 views
1

pyWin32を使用してPython 2.7からSQL Server SMOライブラリを使用しようとしています。私はwin32comをインポートすることができますが、私はライブラリにアクセスしようとすると邪魔になりました。私が試みているコードは以下の通りです。Pythonでwin32comを使用してSMO DLLを使用

import sys 
sys.path.append(r'C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies') 
import win32com.client 
server = win32com.client.Dispatch('Microsoft.SqlServer.Management.SMO.Server') 

def main(): 
    print server 

if __name__ == '__main__': 
    main() 

このコードが実行されると、私はpywintypes.com_error: (-2147221005, 'Invalid class string', None, None)を取得します。

Dispatchへの呼び出しでライブラリの名前が間違っている可能性が高いようですが、それが何であるべきかを知る方法はわかりません。


これは実際にはパスの問題であるようです。

この作品:

import win32api 
win32api.LoadLibrary(r'C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Smo.dll') 

ただし、これはしません:

import sys 
sys.path.append(r'C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies') 
import win32api 
win32api.LoadLibrary(r'Microsoft.SqlServer.Smo.dll') 

答えて

1

win32comは、COMライブラリを使用するためのものであり、それは.NETアセンブリについては何も知りません。現在のところ、CPythonから直接.NETを使用する方法はないので、あなたのオプションはuse IronPythonであるか、C#などでコマンドラインツールを書いてPythonから呼び出すことができます。この作業を行うには

import clr 
clr.AddReference("Microsoft.SqlServer.Smo") 
from Microsoft.SqlServer.Management.Smo import Server 

:尋ねた質問に対して正しいですPondlifeの答え、@に加えて

+0

ありがとうございました。明らかに私はCOMライブラリと.NETアセンブリの違いを理解できませんでした... – Allan

1

Python for .NETモジュール、次のコードを使用してはCPythonで.NETアセンブリをロードすることが可能ですアセンブリのパスをPYTHONPATHに手動で追加する必要がありました。私はsys.path.appendを使って動作させることができませんでした。

+0

あなたはLinuxのボックスでこれを実行することはできませんか?これは、Windowsのボックス上でPythonでsmoを実行するためのものですか? –

+0

これは厳密にはWindowsソリューションです。 – Allan

関連する問題