2012-06-25 46 views
0

我正在尝试使用CRM工作流执行一个SQL作业,通过自定义活动。在我的代码,一个在线教程,让我建立像这样(在C#):我用什么字符串连接到SQL Server?

[CrmWorkflowActivity("A test activity to run SQL Jobs")] 
public sealed class ExecuteSQLJob : System.Activities.CodeActivity 
{ 

    #region Inputs 
    [Input("Job Name")] 
    [Default("BMS_ExtractTransformLoad")] 
    public InArgument<String> JobName { get; set; } 

    [Input("Server Connection")] 
    [Default("HBSSQL2008/MSSQLSERVER")]     //<--This String 
    public InArgument<String> ServerName { get; set; } 

    [Input("User Name")] 
    [Default("-----")] 
    public InArgument<String> UserName { get; set; } 

    [Input("Password")] 
    [Default("-----")] 
    public InArgument<String> Password { get; set; } 
    #endregion 

    protected override void Execute(CodeActivityContext context) 
    { 
     Server server = new Server(ServerName.Get(context)); //<--Is used here 
     try 
     { 
      server.ConnectionContext.LoginSecure = false; 
      server.ConnectionContext.Login = UserName.Get(context); 
      server.ConnectionContext.Password = Password.Get(context); 
      server.ConnectionContext.Connect(); 
      Job job = server.JobServer.Jobs[JobName.Get(context)]; 
      job.Start(); 
     } 
     finally 
     { 
      if (server.ConnectionContext.IsOpen) 
      { 
       server.ConnectionContext.Disconnect(); 
      } 
     } 
    } 
} 

然而,当我尝试运行此工作流程,它抛出一个错误,说无法连接到服务器。 (具体来说,错误是在server.ConnectionContext.Connect()方法调用中引发的)。

问题是serverName字符串?如果是这样,我怎么才能找出正确的serverName来使用?

感谢您的帮助!

编辑: 这里的一些额外的信息...

这是怎么弄到的服务器和实例名第一次: My SQL Query

下面是对CRM流程的错误:

Workflow suspended temporarily due to error: Unhandled Exception: Microsoft.SqlServer.Management.Common.ConnectionFailureException: Failed to connect to server HBSSQL2008. 
    at Microsoft.SqlServer.Management.Common.ConnectionManager.Connect() 
    at ExecuteSQLJob.ExecuteSQLJob.Execute(CodeActivityContext context) 
    at System.Activities.CodeActivity.InternalExecute(ActivityInstance instance, ActivityExecutor executor, BookmarkManager bookmarkManager) 
    at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation) 
Inner Exception: System.Data.SqlClient.SqlException: Login failed for user 'rnkelch'. 
    at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) 
    at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 
    at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 
    at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) 
    at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, TimeoutTimer timeout) 
    at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, TimeoutTimer timeout, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) 
    at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) 
    at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) 
    at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) 
    at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) 
    at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) 
    at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 
    at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 
    at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 
    at System.Data.SqlClient.SqlConnection.Open() 
    at Microsoft.SqlServer.Management.Common.ConnectionManager.InternalConnect(WindowsIdentity impersonatedIdentity) 
    at Microsoft.SqlServer.Management.Common.ConnectionManager.Connect() 

对不起,我本来没有包括这个,谢谢你迄今为止的帮助

+0

假设'HBSSQL2008'是一台机器的网络与SQL Server安装上的名字,并有所谓的'MSSQLSERVER'一个实例,应该工作。但是,您可能在名称中使用了不正确的斜杠 - 请尝试使用反斜杠(“@”HBSSQL2008 \ MSSQLSERVER“')。 –

+0

虽然您可能需要双反斜杠来转义反斜杠,但很确定它仍然适用于属性 – Charleh

+1

这与工作流无关。请不要转发。您应该使用[Profiler](http://msdn.microsoft.com/zh-cn/library/ms181091.aspx)来观察连接尝试。这将显示你是否到达服务器,并给你更多关于你为什么被反弹的细节。运行应用程序的用户帐户被阻止从sql server或登录(您应该检查[dba.se]寻求帮助),或者存在安全问题。回到Profiler的详细信息,我可以帮助您确定问题。 – Will

回答

0

好吧,我想我想通了现在。

因为有我们的服务器上运行的SQL只有一个实例,我实际上并不需要使用服务器名称\实例格式。 hbssql2008和HBSSQL2008都允许我连接。此外,知识产权也适用。

而且,我碰到的另一个问题是我是用来自Windows集成安全性,而不是SQL Server的安全性的用户名和密码。因此,我在服务器上创建了一个具有适当权限和sql安全信息的新帐户,并允许我进行连接。

谢谢大家的帮助!

2

尽管与问题并不完全相关,但仍然有用的site可以帮助您获取连接字符串。

对于SQL Server 2008,请参阅本linky这里,在同一地点

服务器字符串的部分是这样的:

服务器= myServerName \ theInstanceName

已使用在上面声明的正斜杠

[Input("Server Connection")] 
[Default("HBSSQL2008/MSSQLSERVER")]     //<--This String 
public InArgument<String> ServerName { get; set; } 

它改成这样:

[Input("Server Connection")] 
[Default("HBSSQL2008\\MSSQLSERVER")]     //<--This String 
public InArgument<String> ServerName { get; set; } 

可能需要双斜线它逃脱它..

+2

或'@“HBSSQL2008 \ MSSQLSERVER”' –

+0

@Cory:是的绝对:) – t0mm13b

相关问题