Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.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
C# SMO脚本对象和安全性_C#_Sql Server 2005_Security_Smo - Fatal编程技术网

C# SMO脚本对象和安全性

C# SMO脚本对象和安全性,c#,sql-server-2005,security,smo,C#,Sql Server 2005,Security,Smo,我有一个客户在托管服务器上有一个SQL数据库;调用数据库“myDatabase”。 托管公司已锁定对象资源管理器-我在列出的数据库中看不到myDatabase(我看到tempdb和master)。但是,如果我先“使用myDatabase”,然后“从myTable中选择*”,一切都可以正常工作 由于我们无法访问对象资源管理器,我无法右键单击并生成脚本。我以为我可以使用SMO来完成我想要的,但当我尝试类似的事情时: Server myServer = new Server(conn); Databa

我有一个客户在托管服务器上有一个SQL数据库;调用数据库“myDatabase”。

托管公司已锁定对象资源管理器-我在列出的数据库中看不到myDatabase(我看到tempdb和master)。但是,如果我先“使用myDatabase”,然后“从myTable中选择*”,一切都可以正常工作

由于我们无法访问对象资源管理器,我无法右键单击并生成脚本。我以为我可以使用SMO来完成我想要的,但当我尝试类似的事情时:

Server myServer = new Server(conn);
Database myDB = server.Databases["myDatabase"];
Table myTbl = myDB.Tables["myTable"];
失败-myDB为空(当我像预期的那样迭代数据库集合时,我只看到master和tempdb-我可以在对象资源管理器中看到的db)。这显然与安全性有关——如果我在对象资源管理器中看不到该表,它将不允许我通过SMO访问它。有没有人想到一种变通方法或替代方法来让我生成脚本


谢谢

我没有看过SMO代码,但是您是否尝试过在数据库对象上使用构造函数?也许你可以直接访问它

Database myDB = new Database(myServer, "myDatabase");

myDb.Tables集合是否为空?可能是您使用了错误的名称引用它吗

您可以尝试的一个选项是使用Linq2Sql生成数据库的模型。然后,您可以使用该模型创建一个与原始数据库大致相同的新数据库。有关详细信息,请查阅DataContext.CreateDatabase方法

另一个选项是使用以下查询列出所有表:

select * from sys.tables
然后使用以下命令列出表中的所有列:

select * from sys.columns where object_id = (object id from the previous query)

这将为您提供数据库中定义的所有表和列,足以创建数据库结构。此外,还定义了其他对象的系统视图。

要生成哪些sc RIPT?myDB.Tables集合计数为0。因为我不能,对象资源管理器没有列出数据库,也看不到表,所以我假设SQL server管理。工具使用SMO类本身。我可以使用sp_help“tableName”来获取表结构,我希望能够编写脚本。嗯,据我所知,SQL server管理工具使用SMO。您是否尝试过Linq到Sql的方法?它可以工作:-)