SQL 异常 - 与网络相关或特定于实例。 SQL快递"It works on my machine"问题

SQL Exception - Network-related or instance specific. SQL Express "It works on my machine" issue

编辑: 只用了一个星期,但我最终发现了问题,主要是由于纯粹的运气和另一个更具体修复的错误。 问题出在我制作的 connStr 上,出于某种原因,在 运行 时间内,在这台机器上随机出现了 "System.ArgumentException: Keyword not supported: 'datasource'." 的错误。然后我发现了一个修复方法是重命名 connStr 如下:

 connStr = @"server = (server name); Initial Catalog = AutoTestDB; Integrated Security = true";

如果你和我一样有这个错误,试试那个连接方法。 结束编辑

我目前正在使用 Katalon 自动化测试进行自动化测试,本质上是用于 Chrome 的 Selenium,每当我尝试将测试结果添加到我们的测试结果数据库时,SQL 异常"A network-related or instance-specific error occurred while establishing a connection to SQL Server. " 不断弹出。 TCP/IP 已打开,防火墙和远程连接也已打开,我打开了 SQL-SMS 并 运行ning,而我 运行 使用 SQL 的数据库连接。

然而,只有当我使用某台机器访问存储在该机器本身内的数据库时,它才会发生,就像我使用的所有其他机器一样,它们都工作得很好。对于这台机器,我能想到的唯一区别是它使用 SQL Express,而我使用的所有其他机器都有完整版的 Microsoft SQL-SMS-17.

这是 "It works on my machine" 的真实案例,但需要注意的是它适用于其他几个甚至不同的用户,因为我们都在进行此自动化测试,这台机器是此代码的唯一例外不工作,唯一的区别是它使用 SQL Express 应该用 \\SQLExpress.

具有 SQL 连接的 C# 代码将值编辑到数据库中已经创建的 table。

public void testDBAdd(String testName, Boolean pass, String testComment)
    {
        SqlConnection con;
        SqlDataAdapter daAutoTest;
        DataSet dsAutoTestDB = new DataSet();
        SqlCommandBuilder cmdBAutoTest;
        String connStr, sqlAutoTest;

        connStr = @"datasource = .\sqlexpress; Initial Catalog = AutoTestDB; Integrated Security = true";
        con = new SqlConnection(connStr);

        sqlAutoTest = @"SELECT * FROM TestResults";
        daAutoTest = new SqlDataAdapter(sqlAutoTest, connStr);
        cmdBAutoTest = new SqlCommandBuilder(daAutoTest);
        daAutoTest.FillSchema(dsAutoTestDB, SchemaType.Source, "AutoTest");
        daAutoTest.Fill(dsAutoTestDB, "AutoTest");

        foreach (DataRow drAutoTest in dsAutoTestDB.Tables["AutoTest"].Rows)
        {
            if (pass == true && drAutoTest["testName"].ToString() == testName)
            {
                drAutoTest.BeginEdit();

                drAutoTest["testName"] = testName;
                drAutoTest["testResult"] = 1;
                drAutoTest["testComment"] = testComment;

                drAutoTest.EndEdit();
                daAutoTest.Update(dsAutoTestDB, "AutoTest");
            }
            else if (pass == false && drAutoTest["testName"].ToString() == testName)
            {
                drAutoTest.BeginEdit();

                drAutoTest["testName"] = testName;
                drAutoTest["testResult"] = 0;
                drAutoTest["testComment"] = "Exception: " + testComment;

                drAutoTest.EndEdit();
                daAutoTest.Update(dsAutoTestDB, "AutoTest");
            }
        }
    }

代码,运行是实际测试并收集是否由于某些元素的存在而通过或失败的代码,在这种情况下是用户登录时显示的特定页面然后点击一个按钮。

public void settingTest<TestNumber>()
    {
        IWebDriver driver = new ChromeDriver();
        ChromeOptions options = new ChromeOptions();
        options.AddArguments("--start-maximized");
        driver = new ChromeDriver(options);
        String testName = "<Test Number>", testComment = "";
        Boolean pass = false;
        try
        {
            settingsLogin(driver);
            settingsClick(driver);

            Assert.IsTrue(driver.FindElement(ElementLocator).Displayed);

            if (driver.FindElement(ElementLocator).Displayed == true)
            {
                testComment = "Pass";
                pass = true;
                testDBAdd(testName, pass, testComment);
            }
        }
        catch (Exception ex)
        {
            testComment = "" + ex.TargetSite + "" + ex.Message;
            testDBAdd(testName, pass, testComment);
        }
        finally
        {
            driver.Close();
        }
    }

不确定,但我认为您的连接字符串有一个无关的反斜杠。您在字符串前面加上了“@”,但随后在数据源中使用了“\\”。您也可以尝试将“(localdb)\SQLExpress”作为数据源。

只用了一个星期,但我最终发现了问题,主要是由于运气好和另一个错误以及更具体的修复。问题出在我制作的 connStr 上,出于某种原因,在这台机器上,它在运行时随机给我 "System.ArgumentException: Keyword not supported: 'datasource'." 错误。然后我 found 解决了这个问题,将 connStr 重命名如下:

 connStr = @"server = (server name); Initial Catalog = AutoTestDB; Integrated Security = true";

如果你和我一样出现这个错误,试试那个连接方法。并感谢尝试在 post 的评论和 post.

的答案部分提供帮助的用户