2012-06-25 48 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

相關問題