0

我在 [NAnt] 构建过程中使用 Microsoft.SqlServer.Smo.dll 版本 9.0.1399.0。我在 Windows Server 2008 R2 上运行。我同时连接到 Sql Server 2008 R2 (10.5) 和 Sql Server 2008 (10.0)。

我正在调整我们的一种项目类型的部署步骤,现在我所有部署 Sql 作业的构建(到 2008R2 10.5 服务器都抛出一个错误,提示“未设置 ConnectAsUserName”。

如果我指定凭据,则会收到错误消息“不支持此 Sql Server 版本 (10.5)”。

但是,如果我指定 Windows 身份验证,则会收到以下错误:“未设置 ConnectAsUserName”。

我不知道在哪里看,这是我正在使用的代码:

using System;
using System.Collections.Generic;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo.Agent;

...

public void Schedule(string sqlServer, string userName, string password)
{
    ServerConnection conn = new ServerConnection(sqlServer, userName, password);
    conn.LoginSecure = false;

    Server server = new Server(conn);
    Schedule(server);
}

public void Schedule(string sqlServer)
{
    ServerConnection conn = new ServerConnection(sqlServer);
    conn.ConnectAsUser = false;
    conn.LoginSecure = true;

    Server server = new Server(conn);
    Schedule(server);
}

public void Schedule(Server server)
{
    server.JobServer.Refresh();
    JobType.Refresh();

    foreach (JobType job in Items)
        job.Schedule(server);
}

此外,这是错误的堆栈跟踪:

内部错误:未设置 Microsoft.SqlServer.Management.Common.PropertyNotSetException 属性 ConnectAsUserName。

在 Microsoft.SqlServer.Management.Common.ConnectionManager.GetWindowsIdentityForConnection() 在 Microsoft.SqlServer.Management.Common.ConnectionManager.Connect() 在 Microsoft.SqlServer.Management.Common.ConnectionSettings.ThrowIfPropertyNotSet(String propertyName, String str, Boolean checkEmpty)
在 Microsoft.SqlServer.Management.Common.ConnectionManager.PoolConnect() 在 Microsoft.SqlServer.Management.Common.ConnectionManager.get_ServerVersion() 在 Microsoft.SqlServer.Management.Smo.ExecutionManager.GetServerVersion() 在 Microsoft.SqlServer.Management.Smo .SqlSmoObject.IsExpressSku()
在 Microsoft.SqlServer.Management.Smo.SqlSmoObject.CheckVersionNotExpress(String uft) 在 Microsoft.SqlServer.Management.Smo.Server.get_JobServer()
在 SqlSchedule.Jobs.Schedule(Server server) 在 SqlSchedule.Jobs.Schedule(String sqlServer) 在 NAnt.MVST.Tasks.ImportJobsTask.ExecuteTask(String xmlJobs) 在 NAnt.MVST.Tasks.ImportJobsTask.ExecuteTask() 在 NAnt.Core .Task.Execute() 在 NAnt.Core.TaskContainer.ExecuteChildTasks() 在 NAnt.Core.TaskContainer.ExecuteTask() 在 NAnt.Core.Task.Execute()
在 NAnt.Contrib.Tasks.TryCatchTask.ExecuteTask() 在 NAnt .Core.Task.Execute() 在 NAnt.Core.TaskContainer.ExecuteChildTasks() 在 NAnt.Core.Tasks.IfTask.ExecuteTask() 在 NAnt.Core.Task.Execute()
在 NAnt.Core.TaskContainer.ExecuteChildTasks()在 NAnt.Core.Tasks.IfTask.ExecuteTask() 在 NAnt.Core.Task.Execute()
在 NAnt.Core.TaskContainer.ExecuteChildTasks() 在 NAnt.Core.Tasks.IfTask.ExecuteTask() 在 NAnt.Core.Task.Execute()
在 NAnt.Core.Target.Execute() 在 NAnt.Core.Project.Execute (String targetName, Boolean forceDependencies) at NAnt.Core.Tasks.CallTask​​.ExecuteTask() at NAnt.Core.Task.Execute() at NAnt.Core.TaskContainer.ExecuteChildTasks() at NAnt.Core.Tasks.IfTask.ExecuteTask( ) 在 NAnt.Core.Task.Execute()
在 NAnt.Core.Target.Execute() 在 NAnt.Core.Project.Execute(String targetName, Boolean forceDependencies) 在 NAnt.Core.Tasks.CallTask​​.ExecuteTask() 在 NAnt .Core.Task.Execute() at NAnt.Core.Target.Execute() at NAnt.Core.Project.Execute(String targetName, Boolean forceDependencies) at NAnt.Core.Project.Execute() at NAnt.Core.Project。跑()

此外,MSDN 文档指出,如果使用 Windows 身份验证,此属性将被忽略...

我在 stackoverflow 上找到了这篇文章,并且我已经完成了唯一答案中的所有内容(即使它不被接受)。有没有人有更多的想法?

4

1 回答 1

0

起初,我完成了所有设置,就像这篇文章中的答案一样。但经过进一步调查,我发现我的一个程序集来自 90 文件夹而不是 100 文件夹。更改它解决了我的问题。

于 2012-09-05T15:22:38.030 回答