Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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# 从远程计算机角度查看文件夹浏览器对话框,如SSMS使用的对话框_C#_Sql Server_Dialog_Smo - Fatal编程技术网

C# 从远程计算机角度查看文件夹浏览器对话框,如SSMS使用的对话框

C# 从远程计算机角度查看文件夹浏览器对话框,如SSMS使用的对话框,c#,sql-server,dialog,smo,C#,Sql Server,Dialog,Smo,我正在创建一个维护工具,我需要让用户为新数据库选择一个文件位置。我会使用FolderBrowserDialog,但我想从SQL Server实际所在的机器的角度,而不是从运行工具的客户机的角度,向用户显示目录结构 我知道每当您选择备份位置时,SSMS都会这样做,因此我想知道它使用的对话框是否可用,或者是否有办法使FolderBrowserDialog以这种方式工作。似乎当你通过SMS这样做时,你可以绕过某些权限问题(例如,服务器不需要被共享或其他任何东西) 建议?我一直在做类似的工作,遇到了同样

我正在创建一个维护工具,我需要让用户为新数据库选择一个文件位置。我会使用FolderBrowserDialog,但我想从SQL Server实际所在的机器的角度,而不是从运行工具的客户机的角度,向用户显示目录结构

我知道每当您选择备份位置时,SSMS都会这样做,因此我想知道它使用的对话框是否可用,或者是否有办法使FolderBrowserDialog以这种方式工作。似乎当你通过SMS这样做时,你可以绕过某些权限问题(例如,服务器不需要被共享或其他任何东西)


建议?

我一直在做类似的工作,遇到了同样的问题。 我很乐意分享现成的解决方案,但我与魔鬼签订了协议,公司拥有我为他们工作时所赚的一切。 但其要点是:

  • 使用此方法获取服务器上的硬盘驱动器
  • 调用xp_dirtree存储过程以获取给定路径中的文件和子目录
  • 最后,我用树状视图制作了自己的文件对话框表单。填充它的代码应该如下所示:

    public partial class RemoteFileDialog : Form
    {
        public Server server = new Server( new ServerConnection("ServerName", "User", "Password") );
    
        /* ... */
    
        public void getServerDrives()
        {
            DataTable d = server.EnumAvailableMedia();
            foreach (DataRow r in d.Rows)
                treeView.Nodes.Add( new TreeNode(r["Name"].ToString() );
        }
    
        /* ... */
    
        //populate a node with files and subdirectories when it's expanded
        private void treeView_BeforeExpand(object sender, TreeViewCancelEventArgs e)
        {
            DataSet ds = server.ConnectionContext.ExecuteWithResults(string.Format("exec xp_dirtree '{0}', 1, 1", e.Node.FullPath));
            ds.Tables[0].DefaultView.Sort = "file ASC"; // list directories first, then files
            DataTable d = ds.Tables[0].DefaultView.ToTable();
            foreach (DataRow r in d.Rows)
                e.Node.Nodes.Add( new TreeNode(r["subdirectory"].ToString());
        }
    }
    

    谢谢这正是我最后要做的。我本来想把它作为我自己的答案发布,但从来没有想到:)@BVernon你能分享一下你做了什么/一个更好的代码示例吗?上面的一个有一些问题,并且没有完全解释使用Server.EnumAvailableMedia的过程。@我从来没有尝试过他的代码示例,但我只是按照他提到的两个步骤进行了操作。我现在正在进行其他项目,此时我不方便提取该代码,但如果您解释您在执行这两个步骤时遇到的问题,我将尝试提供帮助。我尝试了上述代码,但出现错误“无法连接到服务器”。这两台机器属于同一工作组。