C#如何讓SaveFileDialog框訪問本網中其它電腦的“我的電腦”(未解決)

來源:互聯網
上載者:User

我在C#中用SQLDMO建立資料庫,遇到了一個問題:資料庫檔案的儲存路徑問題
    先選定本網中的一個SQL伺服器(DATASRV),之後在其上建立一個資料庫,建立過程中有一個參數:PhysicalName是指定資料庫檔案(.MDF)的存放路徑,假設指定為D:/TEMP/TEST.MDF則是儲存在伺服器(DATASRV)的D:/TEMP/下。
    用字串的方式指定沒有問題,可以在伺服器的指定檔案夾下建立資料庫檔案(即使這個檔案夾並沒有共用),但我想用一個SaveFileDialog框讓使用者選擇存放路徑,問題是(假設伺服器上管理員權限的使用者名稱和密碼都已知)我只能看到和訪問伺服器上共用出來的檔案夾,但使用這樣的路徑名PhysicalName參數卻不能接受,比如:伺服器DATASRV在D盤共用出一個叫SHARE的檔案夾。PhysicalName參數只能接受“D:/SHARE/TEST.MDF”這樣的路徑而不接受“//DATASRV/SHARE/TEST.MDF”這樣的路徑。
    看起來有兩種解決方式:A)讓SaveFileDialog框訪問伺服器上的“我的電腦”(像訪問本機一樣)   B)通過共用出的檔案夾取得它在伺服器上的絕對路徑


相關代碼如下:
            SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
            SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
            srv.Connect(srvName, "sa", "");
            if (srvName != "local")
            sFDNewDB.InitialDirectory = @"//" + srvName;
            if(sFDNewDB.ShowDialog() == DialogResult.Cancel)
            {
                srv.Close();
                sqlApp.Quit();
                return;
            }
            dbPath = sFDNewDB.FileName;
            dbName = dbPath.Substring(dbPath.LastIndexOf("//")+1,dbPath.Length - dbPath.LastIndexOf("//") - 5);
            bool DBExist = false;
            foreach (SQLDMO.Database db in srv.Databases)
            {
                if (db.Name == dbName)
                {
                    DBExist = true;
                }
            }
            if (DBExist)
            {
                staS.Items["SSLDB"].Text = "此資料庫存名已存在請選擇其它名稱";
                srv.Close();
                sqlApp.Quit();
                return;
            }
            else
                staS.Items["SSLDB"].Text = "正在建立資料庫...";

            SQLDMO.Database nDB = new SQLDMO.Database();
            SQLDMO.DBFile nDBFile = new SQLDMO.DBFile();
            SQLDMO.LogFile nLogFile = new SQLDMO.LogFile();
            nDB.Name = dbName;
            nDBFile.Name = dbName + "file";
            nDBFile.PhysicalName = @dbPath;
            nDBFile.PrimaryFile = true;
            nDBFile.FileGrowthType = 0;
            nDBFile.FileGrowth = 1;
            nDB.FileGroups.Item("primary").DBFiles.Add(nDBFile);
            nLogFile.Name = dbName + "log";
            nLogFile.PhysicalName = @dbPath.Substring(0,dbPath.Length - 3) + "ldf";
            nDB.TransactionLog.LogFiles.Add(nLogFile);
            srv.Databases.Add(nDB);
            //程式在這裡報錯:
            //The physical file name '//DATASRV/SHARE/TEST.MDF'my be incorrect
            srv.Close();
            sqlApp.Quit();

我的暫時解決辦法:
string dbPath = srv.Registry.SQLDataRoot + "
//DATA//" + dbName;
把檔案存到伺服器SQLServer安裝資料夾的DATA檔案夾裡
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.