我在[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.ConnectionSettings.ThrowIfPropertyNotSet(字符串 propertyName,String str,Boolean checkEmpty)at Microsoft.SqlServer.Management.Common.ConnectionManager.GetWindowsIdentityForConnection() 在Microsoft.SqlServer.Management.Common.ConnectionManager.Connect()
在 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(字符串 uft)在Microsoft.SqlServer.Management.Smo.Server.get_JobServer()
在SqlSchedule.Jobs.Schedule(服务器服务器)at SqlSchedule.Jobs.Schedule(String sqlServer)at NAnt.MVST.Tasks.ImportJobsTask.ExecuteTask(String xmlJobs)at at NAnt.MVST.Tasks.ImportJobsTask.ExecuteTask()at NAnt.Core.Task.Execute()at NAnt.Core.TaskContainer.ExecuteChildTasks()at 在NAnt.Core.Task.Execute()的NAnt.Core.TaskContainer.ExecuteTask()
在NAnt.Contrib.Tasks.TryCatchTask.ExecuteTask()at NAnt.Core.Task.Execute()at NAnt.Core.TaskContainer.ExecuteChildTasks()at 在NAnt.Core.Task.Execute()的NAnt.Core.Tasks.IfTask.ExecuteTask()
在NAnt.Core.TaskContainer.ExecuteChildTasks()at 在NAnt.Core.Task.Execute()的NAnt.Core.Tasks.IfTask.ExecuteTask()
在NAnt.Core.TaskContainer.ExecuteChildTasks()at 在NAnt.Core.Task.Execute()的NAnt.Core.Tasks.IfTask.ExecuteTask()
在NAnt.Core.Project.Execute(String)的NAnt.Core.Target.Execute() targetName,Boolean forceDependencies)at 在NAnt.Core.Task.Execute()的NAnt.Core.Tasks.CallTask.ExecuteTask() 在NAnt.Core.TaskContainer.ExecuteChildTasks()at 在NAnt.Core.Task.Execute()的NAnt.Core.Tasks.IfTask.ExecuteTask()
在NAnt.Core.Project.Execute(String)的NAnt.Core.Target.Execute() targetName,Boolean forceDependencies)at 在NAnt.Core.Task.Execute()的NAnt.Core.Tasks.CallTask.ExecuteTask() 在NAnt.Core.Project.Execute(String)的NAnt.Core.Target.Execute() targetName,Boolean forceDependencies)at NAnt.Core.Project.Execute()at NAnt.Core.Project.Run()
此外,MSDN documentation声明如果使用Windows身份验证,则会忽略此属性...
我在stackoverflow上找到this post并且我已经在唯一的答案中完成了所有的东西(即使它不被接受)。有没有人有更多想法?