Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ironpython中为Microsoft.SqlServer.SMO.Scripter.Script类定义参数_Python_Sql Server_Ironpython_Smo - Fatal编程技术网

如何在ironpython中为Microsoft.SqlServer.SMO.Scripter.Script类定义参数

如何在ironpython中为Microsoft.SqlServer.SMO.Scripter.Script类定义参数,python,sql-server,ironpython,smo,Python,Sql Server,Ironpython,Smo,我想使用下面的ironpython代码为我的数据库对象编写脚本: import sys import clr database_name = r'localhost\SQLEXPRESS' dir_assemblies = r'D:\programfiles\Microsoft SQL Server\100\SDK\Assemblies' # Import SMO Namespace sys.path.append(dir_assemblies) clr.AddReferenceToFil

我想使用下面的ironpython代码为我的数据库对象编写脚本:

import sys
import clr

database_name  = r'localhost\SQLEXPRESS'
dir_assemblies = r'D:\programfiles\Microsoft SQL Server\100\SDK\Assemblies'

# Import SMO Namespace
sys.path.append(dir_assemblies)
clr.AddReferenceToFile('Microsoft.SqlServer.Smo.dll')
import Microsoft.SqlServer.Management.Smo as SMO


db       = SMO.Server(database_name)
scripter = SMO.Scripter(db)

for database in db.Databases:
    for table in database.Tables:
        # TypeError: expected Array[Urn], got Table
        scripter.Script(table)    
执行此代码时,我得到以下错误:

File "SMOtest2.py", line 18, in <module>
TypeError: expected Array[Urn], got Table
我尝试创建数组[Urn]或数组[SqlSmoObject],但没有成功

有人知道如何为SMO.Scripter.Script类创建正确的参数吗

我想用python编写下面的VB代码。 摘自:


从未使用过IronPython或SMO,但它似乎需要某种集合。您是否尝试过:

scripter.Script(database.Tables)

不是一次编写一个表的脚本?

从未使用IronPython或SMO,但它似乎需要某种类型的集合。您是否尝试过:

scripter.Script(database.Tables)
不是一次编写一个表的脚本?

我找到了解决方案:

arg=System.Array[SMO.SqlSmoObject]([table])
完整的脚本如下所示:

import sys    
import clr    
# import .NET Array
import System.Array

database_name  = r'localhost\SQLEXPRESS'    
dir_assemblies = r'D:\programfiles\Microsoft SQL Server\100\SDK\Assemblies'   

# Import SMO Namespace    
sys.path.append(dir_assemblies)    
clr.AddReferenceToFile('Microsoft.SqlServer.Smo.dll')    
import Microsoft.SqlServer.Management.Smo as SMO    


db       = SMO.Server(database_name)    
scripter = SMO.Scripter(db)    

for database in db.Databases:    
    for table in database.Tables:    
        # create a .NET Array as an argument for the scripter
        arg=System.Array[SMO.SqlSmoObject]([table])
        script = scripter.Script(arg)
        #output script
        for line in script:
            print line
我找到了解决办法:

arg=System.Array[SMO.SqlSmoObject]([table])
完整的脚本如下所示:

import sys    
import clr    
# import .NET Array
import System.Array

database_name  = r'localhost\SQLEXPRESS'    
dir_assemblies = r'D:\programfiles\Microsoft SQL Server\100\SDK\Assemblies'   

# Import SMO Namespace    
sys.path.append(dir_assemblies)    
clr.AddReferenceToFile('Microsoft.SqlServer.Smo.dll')    
import Microsoft.SqlServer.Management.Smo as SMO    


db       = SMO.Server(database_name)    
scripter = SMO.Scripter(db)    

for database in db.Databases:    
    for table in database.Tables:    
        # create a .NET Array as an argument for the scripter
        arg=System.Array[SMO.SqlSmoObject]([table])
        script = scripter.Script(arg)
        #output script
        for line in script:
            print line

谢谢你的回复。我试过你的建议,但不幸没有成功。(参见下面的答案)我希望调用重载接受
数组[SqlSmoObject]
。可能先尝试将
表格集合
转换为
数组[表格]
。谢谢您的回复。我试过你的建议,但不幸没有成功。(参见下面的答案)我希望调用重载接受
数组[SqlSmoObject]
。可能先尝试将
表格集合
转换为
数组[表格]