【发布时间】:2019-10-25 03:23:14
【问题描述】:
我在我的 SQLEXPRESS 实例中设置了一个数据库 (QCDB)。我添加了一个在服务器级别启用了 serveradmin、sysadmin 和公共服务器角色的用户 (QCast)。用户在 db 级别具有 db_owner 角色。但是在 VS 中使用以下命令连接到数据库时
string strConn = "Data Source=STA15-DT-ADM\\SQLEXPRESS;AttachDbFilename=C:\\Program Files\\Microsoft SQL Server\\MSSQL14.SQLEXPRESS\\MSSQL\\DATA\\QCDB.mdf;User Id=QCast;Password=QC@st; Connect Timeout=30";
SqlConnection con = new SqlConnection(strConn);
string dbget = "SELECT WOnum WOstatus FROM WOdetail";
SqlCommand cmd = new SqlCommand(dbget, con);
con.Open();
SqlDataAdapter ad = new SqlDataAdapter(cmd);
DataTable dt = new DataTable("Results");
ad.Fill(dt);
WOgrid.ItemsSource = dt.DefaultView;
cmd.Dispose();
con.Close();
我收到以下错误
System.Data.SqlClient.SqlException: '无法打开物理文件“C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\DATA\QCDB.mdf”。操作系统错误 5:“5(拒绝访问。)”。尝试为文件 C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\DATA\QCDB.mdf 附加自动命名数据库失败。存在同名数据库,或指定文件无法打开,或位于 UNC 共享上。'
不知道我做错了什么。
【问题讨论】:
-
某个进程已经打开了文件。也许该文件已经加载到 SQL Express 中? (Local DB,按需加载数据库的模式,一般不兼容在其他工具中打开文件,包括VS,同时在应用程序中使用。(这就是为什么我坚持使用完整的SQL Server,在开发者版中。)
-
不能是我在同一个目录中打开了另一个数据库的位置
-
如何检查进程是否打开了文件?我已经从 SQL Mgmt Studio 中分离了数据库
-
Sys Internals 有
handles和 Process Explorer,两者都可以找到所有带有文件句柄的进程(后者更容易使用它的查找功能)。 -
Process Explorer 干涸了
标签: sql wpf visual-studio