2012-06-25 3 views
0

사용자 지정 작업을 만들어 CRM 워크 플로를 사용하여 SQL 작업을 실행하려고합니다. 나는이 워크 플로를 실행하려고하면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(); 
      } 
     } 
    } 
} 

그러나, 그것은 서버에 연결할 수 없다는 오류가 발생합니다 : 내 코드에서, 온라인 자습서 날 (C#에서) 이런 식으로 구성했다. (특히 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/en-us/library/ms181091.aspx)를 사용하여 연결 시도를 관찰해야합니다. 서버에 도달하는 경우 표시되며, 반송 이유에 대해 자세히 설명합니다. 응용 프로그램을 실행중인 사용자 계정이 SQL Server 또는 로그인에서 차단되었거나 ([dba.se]에서 도움말을 확인해야 함) 도메인에 보안 문제가 있습니다. 프로필러 세부 정보로 돌아와서 문제를 파악하는 데 도움을 드릴 수 있습니다. – Will

답변

0

좋아 .. 그것을 탈출 더블 슬래시, 나는 지금 그것을 알아 낸 것 같아요.

서버에서 실행중인 SQL 인스턴스가 하나뿐이기 때문에 실제로 ServerName \ InstanceName 형식을 사용할 필요가 없습니다. hbssql2008과 HBSSQL2008 모두 나를 연결할 수 있습니다. 또한 IP도 잘 작동합니다.

또 다른 문제는 SQL Server의 보안이 아닌 Windows 통합 보안의 사용자 이름과 암호입니다. 따라서 적절한 권한과 SQL 보안 정보를 사용하여 서버에 새 계정을 만들었고 연결할 수있었습니다.

도움 주셔서 감사합니다.

2

비록 완전히 질문과 관련이 없지만, 유용한 site은 연결 문자열을 올바르게 가져 오는 데 도움이되는 책갈피입니다.

서버 = myServerName \ theInstanceName

당신은 사용했다 :

SQL Server 2008의

, 서버 문자열의 부분이있다

같은 사이트에서, 여기 linky 참조 선언적 위의 슬래시는

[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

관련 문제