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

SQL/С# - лучший способ выполнения запроса

Мне нужно выполнить sql-запрос из класса С#. Я подумал о двух вариантах

  • Запуск процесса sqlcmd.
  • Использование объекта SqlCommand.

Мой вопрос в том, какой будет лучший способ? Очень важно, чтобы в течение короткого времени на сервере было установлено соединение с сервером.

Я открыт для других идей, если выше не очень хорошо.

Спасибо заранее.

4b9b3361

Ответ 1

Использовать SqlCommand. Этот код будет поддерживать соединение только в течение очень короткого периода времени (пока ваш запрос будет выполнен):

DataTable results = new DataTable();

using(SqlConnection conn = new SqlConnection(connString))
    using(SqlCommand command = new SqlCommand(query, conn))
        using (SqlDataAdapter dataAdapter = new SqlDataAdapter(command))
           dataAdapter.Fill(results);

Ответ 2

От MSDN:

В следующем примере создается SqlConnection, SqlCommand и SqlDataReader. Пример читает данные, записывая их на консоль. Наконец, пример закрывает SqlDataReader, а затем SqlConnection, когда он выходит из блоков использования кода.

private static void ReadOrderData(string connectionString)
{
    string queryString = 
        "SELECT OrderID, CustomerID FROM dbo.Orders;";
    using (SqlConnection connection = new SqlConnection(
               connectionString))
    {
        SqlCommand command = new SqlCommand(
            queryString, connection);
        connection.Open();
        SqlDataReader reader = command.ExecuteReader();
        try
        {
            while (reader.Read())
            {
                Console.WriteLine(String.Format("{0}, {1}",
                    reader[0], reader[1]));
            }
        }
        finally
        {
            // Always call Close when done reading.
            reader.Close();
        }
    }
}

Ответ 3

Это зависит. Если вам неважно, что результат запроса, который ищет процесс, который использует sqlcmd, может быть в порядке. Если, с другой стороны, вам нужно контролировать результаты, было бы лучше использовать ADO.NET. Чтобы не дольше оставаться открытым, убедитесь, что вы отключили объединение пулов ADO.NET, добавив Pooling=false к вашей строке подключения:

using (var conn = new SqlConnection("Data Source=server;Initial Catalog=somedb;User Id=foo;Password=secret;Pooling=false"))
using (var cmd = conn.CreateCommand())
{
    conn.Open();
    cmd.CommandText = "DELETE FROM foo";
    var result = cmd.ExecuteNonQuery();
}

Ответ 4

Я думаю, что SqlCommand - явный победитель, потому что вам не нужно подключать другой процесс. Вы можете закрыть соединение с базой данных, как только вы закончите с ней.

А затем вы также можете распространять приложение на машины, у которых нет sqlcmd.

Ответ 5

Я думаю, что SqlCommand - хорошая идея, но имейте в виду, что этот класс доступен только при подключении к SQL Server. Вам понадобятся другие типы команд/соединений, если вы имеете дело с Oracle или соединение OleDb с какой-либо другой базой данных. Все объекты команд данных наследуют от DbCommand, поэтому я бы это прочитал.