几天前我的电脑上出现了这个问题,我没有对Visual Studio / SQL Server设置进行任何更改。
尝试在Visual Studio中对数据库文件(* .mdf)执行任何手动操作时,出现以下错误:
找不到指定的程序。 (HRESULT异常:0x8007007F)
(例如,在尝试创建新表时,或在显示现有表的数据时)
我如何解决此错误?
答案 0 :(得分:1)
请确保您或其他人未更改您对主人的权利。为了添加任何内容,记录将添加到该表中。
附录: 您可以运行以下脚本来确定谁具有哪些权限以及它们是隐式还是显式。
WITH perms_cte as
(
select USER_NAME(p.grantee_principal_id) AS principal_name,
dp.principal_id,
dp.type_desc AS principal_type_desc,
p.class_desc,
OBJECT_NAME(p.major_id) AS object_name,
p.permission_name,
p.state_desc AS permission_state_desc
from sys.database_permissions p
inner JOIN sys.database_principals dp
on p.grantee_principal_id = dp.principal_id
)
--users
SELECT p.principal_name, p.principal_type_desc, p.class_desc, p.[object_name], p.permission_name, p.permission_state_desc, cast(NULL as sysname) as role_name
FROM perms_cte p
WHERE principal_type_desc <> 'DATABASE_ROLE'
UNION
--role members
SELECT rm.member_principal_name, rm.principal_type_desc, p.class_desc, p.object_name, p.permission_name, p.permission_state_desc,rm.role_name
FROM perms_cte p
right outer JOIN (
select role_principal_id, dp.type_desc as principal_type_desc, member_principal_id,user_name(member_principal_id) as member_principal_name,user_name(role_principal_id) as role_name--,*
from sys.database_role_members rm
INNER JOIN sys.database_principals dp
ON rm.member_principal_id = dp.principal_id
) rm
ON rm.role_principal_id = p.principal_id
order by 1
--- thanks to Jamie Thomson for this ditty
更多建议;
使用探查器跟踪呼叫并确认您是以您认为自己的用户身份进行连接 - sp_who2可能是另一种验证方式。
验证您的进程是否在正确的数据库中。使用c#连接并运行SELECT DB_NAME() - 将结果写入您可以阅读的地方进行确认。
如果这适用于一个环境而不是另一个环境,我会强烈怀疑连接字符串。
检查SQL日志中是否报告了身份验证错误。这些再次表明可能存在连接问题。
答案 1 :(得分:1)
这个错误的传统观点是它可能反映了丢失或损坏的DLL(在SQL Server或Visual Studio中)。 SOP将重新安装,但似乎并不总是有效。
答案 2 :(得分:0)
尝试以管理员身份运行Visual Studio
右键单击Visual Studio - &gt;以管理员身份运行。
答案 3 :(得分:0)
尝试连接到SQL Server Management Studio中的数据库。这至少会缩小它是否是数据库权限问题或其他问题。另外,请检查以确认数据库是否存在,并且您有权访问它。 (像乔建议的那样。)
假设检查出来......我的谷歌搜索发现了一个声音问题非常相似的人。他说,运行管理员的事情Adel建议为他工作,但还有其他问题也可能导致错误消息,包括VS无法找到Web应用程序项目文件中指定的IIS虚拟服务器(权限?重命名?) 。确认该文件存在且您有权访问它。