首页 > 解决方案 > 从 VB.NET 执行索引重建

问题描述

我正在尝试从 VB.NET 控制台应用程序调用 Index Rebuild 存储过程,但我收到“用户没有执行此操作的权限”错误。

我已经使用与控制台应用程序连接字符串相同的用户 ID 登录到 SQL 服务器,并设法通过 SQL Management Studio 运行相同的存储过程。

在尝试使其正常工作时,我授予用户 ID 完整的服务器管理员访问权限,但仍然发生错误,但仅在从控制台应用程序调用时发生。

代码是

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 只是从文本文件 Server=;Database=;uid=;Password= 中读取所需的连接字符串

我在整个程序中成功使用了相同的连接字符串。

有没有人设法从 VB.NET 控制台应用程序执行索引重建?

标签: sqlsql-servervb.net

解决方案


尝试改变这一行:

Dim builder As SqlConnectionStringBuilder = New 
    SqlConnectionStringBuilder("Integrated Security=SSPI;") 

或者

Dim builder As SqlConnectionStringBuilder = New 
    SqlConnectionStringBuilder("Integrated Security=true;")

这意味着什么:

Integrated Security = False:在连接中指定用户 ID 和密码。

Integrated Security = true:当前的 Windows 帐户凭据用于身份验证。但是,请注意它并不适用于所有 SQL 提供程序。它将与OleDb提供者一起引发异常。

Integrated Security = SSPI: 这等价于 true,但它适用于SQL ClientOleDb提供程序。

请参阅 MSDN 上的连接字符串。

更新: 此外,尝试为您的用户设置以下角色,例如publicsysadmin

在此处输入图像描述


推荐阅读