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