C# 我使用什么字符串连接到SQL Server?

C# 我使用什么字符串连接到SQL Server?,c#,sql-server-2008,workflow-foundation-4,C#,Sql Server 2008,Workflow Foundation 4,我试图通过创建自定义活动来使用CRM工作流执行SQL作业。在我的代码中,一个在线教程让我在c中这样构造它: [CrmWorkflowActivity("A test activity to run SQL Jobs")] public sealed class ExecuteSQLJob : System.Activities.CodeActivity { #region Inputs [Input("Job Name")] [Default("BMS_ExtractT

我试图通过创建自定义活动来使用CRM工作流执行SQL作业。在我的代码中,一个在线教程让我在c中这样构造它:

[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();
            }
        }
    }
}

很抱歉,我最初没有包含此内容,感谢您迄今为止的帮助

尽管与问题不完全相关,但这是一个有用的书签,可帮助您正确设置连接字符串

对于SQL Server 2008,请在同一站点上查看此处

服务器字符串的部分如下所示:

Server=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; }

可能需要用双斜杠将其转义。

好的,我想我现在明白了

因为只有一个SQL实例在我们的服务器上运行,所以我实际上不需要使用ServerName\InstanceName格式。hbssql2008和hbssql2008都允许我连接。此外,IP也可以工作

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


谢谢大家的帮助

假设HBSSQL2008是您网络上安装了SQL Server的机器的名称,并且有一个名为MSSQLSERVER的实例,那么应该可以工作。但是名称中可能有错误的斜杠-请改为使用反斜杠@HBSSQL2008\MSSQLSERVER。不过,您可能需要使用双反斜杠来转义反斜杠,因为它仍然适用于属性。这与工作流无关。请不要转载。您应该使用监视连接尝试。这将显示您是否正在到达服务器,并为您提供更多有关被弹回原因的详细信息。运行应用程序的用户帐户正在被sql server阻止或登录。您应该在那里查看帮助,或者域上存在安全问题。带着探查器的详细信息回来,我可以帮助您确定问题。谢谢Will。很抱歉重新发布,但是由于在弄乱了一些设置和做了一些其他事情后,错误发生在我身上,所以我试图将问题的焦点从连接字符串上移开。我将继续使用探查器,稍后再回来提供更多信息。或者@HBSSQL2008\MSSQLSERVER
[Input("Server Connection")]
[Default("HBSSQL2008\\MSSQLSERVER")]                  //<--This String
public InArgument<String> ServerName { get; set; }