Исключение SQL - для сети или для конкретного экземпляра.SQL Express «Это работает на моей машине» - PullRequest
0 голосов
/ 14 мая 2018

РЕДАКТИРОВАТЬ: Это заняло всего неделю, но я в конце концов обнаружил проблему, в основном из-за чистой удачи и еще одной ошибки с более конкретным исправлением.Проблема была с connStr, который я сделал, который по какой-то причине на этом компьютере выдал мне случайную ошибку «System.ArgumentException: ключевое слово не поддерживается:« источник данных ».»во время выполнения.Затем я обнаружил, что для этого нужно было переименовать connStr следующим образом:

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

Если у вас возникла эта ошибка, как у меня, попробуйте этот метод подключения. END EDIT

В настоящее время я работаю над автоматизированным тестированием с использованием автоматического тестирования Katalon, в основном Selenium для Chrome, и всякий раз, когда пытаюсь добавить результаты теста в нашу базу данных результатов тестированияИсключение SQL «Ошибка, связанная с сетью или экземпляром, возникшая при установлении соединения с SQL Server.» продолжает появляться.TCP / IP открыт, как и брандмауэр и удаленные подключения, и у меня открыт и работает SQL-SMS во время работы базы данных с подключением SQL.

Однако это происходит только тогда, когда я использую определенноемашина для доступа к базе данных, которая хранится в самой машине, как и на любой другой машине, которую я использую, и все они работают отлично.Единственное отличие, которое я могу придумать для этой машины, заключается в том, что она использует SQL Express, в то время как все остальные, которыми я пользуюсь, имеют полную версию Microsoft SQL-SMS-17.

Это подлинный случай «Она работает на«Моя машина», за исключением оговорки, что она работает на нескольких других и даже на разных пользователях, поскольку мы все работаем над этим автоматическим тестированием, эта машина является единственным исключением для этого неработающего кода, с той лишь разницей, что она использует SQLExpress, который следует учитывать с помощью \\ SQLExpress.

C # кода с соединениями SQL для редактирования значений в уже созданную таблицу в базе данных.

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

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Это заняло всего неделю, но я в конце концов обнаружил проблему, в основном из-за чистой удачи и еще одной ошибки с более конкретным исправлением.Проблема была с connStr, который я сделал, который по какой-то причине на этом компьютере выдал мне случайную ошибку «System.ArgumentException: ключевое слово не поддерживается:« источник данных ».»во время выполнения.Затем я обнаружил исправление для того, чтобы переименовать connStr следующим образом:

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

Если у вас есть эта ошибка, как у меня, попробуйте этот метод подключения.И спасибо пользователям, которые пытались помочь как в комментариях к посту, так и в разделе ответов этого поста.

0 голосов
/ 14 мая 2018

Не уверен, но я думаю, что у вашей строки подключения есть обратный слеш.Вы предваряли строку символом «@», но затем использовали «\\» в источнике данных.Вы также можете попробовать "(localdb) \ SQLExpress" в качестве источника данных.

...