错误“ConnectAsUserName未设置”但我甚至没有使用该属性

时间:2012-09-04 16:26:05

标签: c# build-process nant smo

我在[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并且我已经在唯一的答案中完成了所有的东西(即使它不被接受)。有没有人有更多想法?

1 个答案:

答案 0 :(得分:0)

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