Подключитесь к базе данных с помощью DbConnection, SqlConnection, SqlCommand, DbCommand и т. Д. - PullRequest
0 голосов
/ 08 января 2020

Я посмотрел, как установить соединение с базой данных, используя ado. net. Я был сбит с толку DbConnection, SqlConnection, SqlCommand, DbCommand. Может кто-нибудь сказать мне разницу?

Я погуглил эти термины, кажется, что эти префиксы БД являются базовым классом для этих Sql префиксов.

Так, когда мы должны эти Sql префикс (SqlConnection) и когда мы должны использовать префикс БД (DbConnection)?

Кроме того, если я помещаю строку подключения в App.config или Web.config, нужно ли мне все еще использовать этот формат для открытия и закрытия соединения?

string connString = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;";

using (SqlConnection conn = new SqlConnection(connString))
{
}

Потому что после того, как я попытался добавить строку соединения в App.config, кажется, что мне больше не нужно открывать и закрывать соединение.

Кроме того, когда использовать SqlParameter? Кто-нибудь может дать мне пример?

Это для передачи параметра из хранимой процедуры из базы данных?

Удобнее ли использовать DataTable, DataSet или reader для передачи значения?

Ответы [ 2 ]

2 голосов
/ 08 января 2020

DbConnection описывает общий API для общения с несколькими базами данных; SqlConnection - это специфицированный c API для общения с SQL Сервером, который равен a DbConnection. Таким образом, вы будете использовать SqlConnection, если знаете, что говорите с SQL сервером, и DbConnection, если хотите говорить о соединениях в абстрактном смысле «любой сервер». SqlConnection даст вам больше API c, определяемых поставщиком, чем DbConnection.

Для параметров: в основном, всякий раз, когда вы передаете ввод любого типа какой-либо команде. Итак: много . Вы можете найти такие инструменты, как Dapper или EF проще.

Для DataTable / DataSet: они должны не быть вашими значениями по умолчанию для дальнейшего использования. Они по-прежнему работают , но обычно любой другой подход предпочтительнее.

1 голос
/ 08 января 2020

Чтобы уточнить ответ Mar c относительно параметров. Вы всегда хотите использовать параметры, чтобы все, что вы передаете, всегда рассматривалось как значение. Одним из преимуществ является то, что у вас не будет символов, таких как одинарные кавычки, что приведет к сбою запроса Пример которого у меня есть в коде ниже. Другой причиной является предотвращение SQL инъекционных атак. В Википедии есть несколько хороших примеров https://en.wikipedia.org/wiki/SQL_injection.

    private void SingleQuoteExample()
    {
        string customerName = "John'Smith";

        SqlWithParameter(customerName); //This works

        SqlWithoutParameter(customerName); //This doesn't because we end up with
        //SELECT * FROM CUSTOMERS WHERE CUSTOMERNAME = 'JOHN'SMITH'
        //Which from SQLs point of view has an extra single quote
    }
    private void SqlWithParameter(string customerName)
    {
        string constr = "DataSource......";
        using (SqlConnection con = new SqlConnection(constr))
        {
            con.Open();
            string queryStr = "SELECT * FROM CUSTOMERS WHERE CUSTOMERNAME = @CUSTOMERNAME";
            using (SqlCommand cmd = new SqlCommand(queryStr, con))
            {
                cmd.Parameters.AddWithValue("@CUSTOMERNAME", customerName);
                //read stuff
            }
        }
    }

    private void SqlWithoutParameter(string customerName)
    {
        string constr = "DataSource......";
        using (SqlConnection con = new SqlConnection(constr))
        {
            con.Open();
            string queryStr = "SELECT * FROM CUSTOMERS WHERE CUSTOMERNAME = '" + customerName + "'";
            using (SqlCommand cmd = new SqlCommand(queryStr, con))
            {
                //read stuff
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...