我试图从VB.NET控制台应用程序调用“索引重建”存储过程,但出现“用户无权执行此操作”错误。
我已使用与控制台应用程序连接字符串相同的用户名登录SQL Server,并设法通过SQL Management Studio运行相同的存储过程。
在尝试使之工作时,我授予了userid完全服务器管理员访问权限,但仍然发生错误,但仅在从控制台应用程序调用时会发生。
代码为
Private conPR As New SqlConnection(GetConnectionString.getconnectionstring("PR"))
Dim rebuildindexstr As String = "Exec sp_msforeachtable 'SET QUOTED_IDENTIFIER ON; ALTER INDEX ALL ON ? REBUILD';"
Dim rebuildindexpro As New SqlCommand(rebuildindexstr, conPR)
conPR.Open()
rebuildindexpro.CommandTimeout = 0
rebuildindexpro.ExecuteNonQuery()
conPR.Close()
GetConnectionString只是从文本文件中读取所需的连接字符串 服务器=;数据库=; uid =;密码=
我在整个程序中成功使用了相同的连接字符串。
有人能从VB.NET控制台应用程序执行索引重建吗?
答案 0 :(得分:0)
尝试更改此行:
Dim builder As SqlConnectionStringBuilder = New
SqlConnectionStringBuilder("Integrated Security=SSPI;")
OR
Dim builder As SqlConnectionStringBuilder = New
SqlConnectionStringBuilder("Integrated Security=true;")
这意味着什么:
Integrated Security = False
:在连接中指定了用户ID和密码。
Integrated Security = true
:当前Windows帐户凭据用于身份验证。但是,请注意,它并非在所有SQL提供程序中都起作用。 OleDb
提供程序将引发异常。
Integrated Security = SSPI
:等同于true,但是它适用于SQL Client
和OleDb
提供程序。
Please, see connection strings at MSDN.
更新:
此外,尝试为用户设置以下角色,例如public
和sysadmin
: