C # DbConnection приведен к SqlConnection

Я сомневаюсь, что в вашей системе установлено более одного glibc. Но ldd -v <path/to/gcc-4.x> должен предоставить вам glibc.

16
задан Darqer 5 September 2010 в 19:40
поделиться

2 ответа

Нет, это небезопасно, приведение никогда не безопасно, и оно может взорваться в любое время, когда ваше приложение работает. Хотя SqlConnection действительно вытекает из DbConnection, вам не гарантируется, что database.CreateConnection() вернет SqlConnection, поскольку это может быть параметризовано в файле конфигурации. Кроме того, почему вам нужно привести к SqlConnection? Всегда лучше работать с классами, которые находятся выше в иерархии, чтобы избежать связывания вашего кода с конкретной реализацией, которая сделает ваш код невозможным для тестирования в изоляции.

В то время как EnterpriseLibrary неплохо справляется с абстракцией, вы убиваете всех с помощью этого состава. Также вы должны убедиться, что одноразовые ресурсы всегда располагаются должным образом. Как об этом вместо этого:

Database database = DatabaseFactory.CreateDatabase("connection string");
using (var conn = database.CreateConnection())
using (var cmd = conn.CreateCommand())
{
    conn.Open();
    cmd.CommandText = "SELECT id FROM foo";
    using (var reader = cmd.ExecuteReader())
    {
        while (reader.Read())
        {
            // TODO: work with the results here
        }
    }
}

Таким образом, ваш код менее хрупок к изменениям базы данных в файле конфигурации. Ну, конечно, у вас все еще есть этот код SQL, и есть ORM, которые позаботятся о такой ситуации. Они также позволят вам сосредоточиться на реальном домене вашего приложения, вместо того, чтобы тратить время на написание SQL-запросов и приведение от одного поставщика базы данных к другому. Но для простого приложения это нормально.

13
ответ дан Darin Dimitrov 5 September 2010 в 19:40
поделиться

Это зависит от баз данных, которые вы используете в вашем приложении. Из написанного вами кода похоже, что используется только SQL Server. Если это так, то вы можете безопасно разыграть DbConnection - SqlConnection. Фактически DbConnection является базовым классом для любого другого соединения с базой данных. В вашем случае это SqlConnection (который используется для работы с базой данных SQL Server), также есть разные базы данных, такие как Oracle, Mysql и т. Д., И их провайдеры обычно имеют собственные классы для соединений. Поэтому, если ваше приложение использует другие базы данных или может использовать его в будущем, такое использование небезопасно.

5
ответ дан Andrew Bezzub 5 September 2010 в 19:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: