Подтвердить что ты не робот

Не удается подключиться к базе данных SQL 2008 с использованием .NET Core 2.0

UPDATE

Я никогда не смог бы выполнить эту работу с пользователем Windows Authentication (domain). Но с пользователем "Аутентификация SQL Server" все работает так, как должно было.

ОРИГИНАЛЬНЫЙ ВОПРОС

My connectionString: Server=ip;Database=dbname;User Id=xxx\user;Password=pass;

Строка подключения находится в appsettings.json следующим образом:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "ConnectionStrings": {
    "ConnectionString": "Server=ip;Database=dbname;User Id=xxx\user;Password=pass;"
  }
}

Затем я передаю его статическому классу из файла "Startup.cs", например:

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddMvc();

    Orm.DatabaseConnection.ConnectionString = Configuration["ConnectionStrings:ConnectionString"];
}

Здесь я инициирую соединение:

using System.Data.SqlClient;

namespace MyProject.Orm
{
    public static class DatabaseConnection
    {
        public static string ConnectionString { get; set; }

        public static SqlConnection ConnectionFactory()
        {
            return new SqlConnection(ConnectionString);
        }
    }
}

И это мой контроллер:

public string Get()
{
    using (var databaseConnection = Orm.DatabaseConnection.ConnectionFactory())
    {
        var sections = databaseConnection.Query("SELECT * FROM myTable").ToList();
        return sections.ToString();
    }
}

Если эта строка:

var databaseConnection = Orm.DatabaseConnection.ConnectionFactory();

возвращает:

ServerVersion: "'databaseConnection.ServerVersion' threw an exception of type 'System.InvalidOperationException'"
Message: "Invalid operation. The connection is closed."
Source: "System.Data.SqlClient"
StackTrace: "at 
System.Data.SqlClient.SqlConnection.GetOpenTdsConnection()\n   
at 
System.Data.SqlClient.SqlConnection.get_ServerVersion()"

И я получаю эту ошибку на new SqlConnection: "error CS0119: 'SqlConnection' is a type, which is not valid in the given context".

Но выполнение этой программы не прекращается из-за этих ошибок.

Затем приложение зависает в следующей строке:

var sections = databaseConnection.Query("SELECT * FROM myTable").ToList();

Я использую Dapper как мой ORM (не EntityFramework). В таблице "myTable" sql всего 17 строк и 5 столбцов, поэтому она должна загружаться быстро.

Я пробовал всевозможные разныеStringString, но он всегда терпит неудачу. Если я попробую то же самое с .NET Framework 4.5, все будет хорошо. Проблема заключается в .NET Core 2.0.

Любая идея об исправлении приветствуется. Потому что я потратил слишком много часов на это уже.

4b9b3361

Ответ 1

Попробуйте добавить databaseConnection.Open().

public string Get()
{
    using (var databaseConnection = new SqlConnection(@"Server=ip;Database=dbname;User Id=xxx\user;Password=pass;Pooling=false;"))
    {
        databaseConnection.Open();
        var sections = databaseConnection.Query("SELECT * FROM myTable").ToList();
        return sections.ToString();
    }
}

Чтобы избежать проблем с пулом подключений, описанным в комментариях, вы добавляете Pooling=false; к строке подключения: Server=ip;Database=dbname;User Id=xxx\user;Password=pass;Pooling=false;

Изменить: Я жестко закодировал строку подключения и удалил factory, чтобы сделать пример меньшим

Ответ 2

Попробуйте создать автономное развертывание это должно устранить и странные вещи зависимостей. Если он работает, то, по крайней мере, вы знаете, что это связано с некоторыми материалами типа привязки сборки.

Исключение "error CS0119: 'SqlConnection' is a type, which is not valid in the given context" пахнет, как есть.