C#如何让SaveFileDialog框访问本地网络中其它电脑的“我的电脑”(未解决)
2006-09-10 10:48
375 查看
我在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文件夹里
先选定本地网络中的一个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文件夹里
相关文章推荐
- 手机上的android程序如何连接上电脑上Tomcat网页并访问网络
- flash如何同时访问本地文件系统和网络文件
- 如何在拨号的同时又可以访问本地网络
- Genymotion模拟器如何访问电脑本地的服务器
- 如何使一台电脑同时使用有线本地网络和无线网络进行上网
- 网络采集软件核心技术剖析系列(3)---如何使用C#语言下载博文中的全部图片到本地并可以离线浏览
- 如何将自己的本地电脑变成可供外网访问的服务器
- 如何使电脑自动选择两个网络连接中有效的连接访问互联网
- 如何让局域网的其它电脑访问自己Tomcat搭建的服务器
- 2014-11-10 关于C# 如何获取本地电脑的UTC时区
- 外部网络如何访问路由器下的电脑
- 使用UAParser在C#MVC项目中如何判断用户是在用什么设备进行访问(手机,平板还是普通的电脑)
- C#在IIS上如何访问网络上的共享盘
- 如何通过手机直接访问本地电脑中的网站
- 如何在Android模拟器上访问电脑本地的Web应用
- 【Android学习笔记】如何在Android模拟器访问本地电脑的web应用
- 如何用手机访问电脑本地localhost网页, 以调试项目?
- 如何让访问win8电脑的共享盘 不用总提示输入网络凭证
- VB6 中如何访问C# Dll 中的方法、属性以及事件