Эффективный код многократного ввода параметров SQL Вставка: C # - PullRequest
0 голосов
/ 15 октября 2019

У меня есть ряд объектов, каждый из которых имеет свои вспомогательные функции для подготовки их к вставке SQL. При первоначальном кодировании это выполнялось с помощью обычных операций со строками для генерации текста команды SQL. Затем строка будет передана в общий модуль SQL Execute, который осуществляет связь с базой данных. Сейчас я конвертирую эти методы, чтобы использовать параметры для лучшей практики трудоустройства. Мой запрос выбора, метод выглядит следующим образом:

public static DataTable ExecuteSelectSQLQuery(string SQLString,
        List<SqlParameter> myParameters)
    {

        string fullSQLString = "";
        fullSQLString = "USE " + dbName + "\n" + SQLString;
        string myConnString = ConnectionStringHelper.GetConnectionString();
        Console.WriteLine("Connecting to SQL Server for Parameterized Query...");
        SqlConnection connection = new SqlConnection(myConnString);
        SqlDataAdapter myAdapter = new SqlDataAdapter(SQLString, connection);
        foreach (SqlParameter para in myParameters)
            myAdapter.SelectCommand.Parameters.Add(para);

        DataSet mySet = new DataSet();
        myAdapter.Fill(mySet, "myTable");
        DataTable dt = mySet.Tables["myTable"];
        Console.WriteLine("Connection Closed.  Operation Complete.");
        return dt;
    }

Я сейчас пытаюсь параметризовать запрос вставки таким же образом. Иногда я хочу загружать несколько сотен записей за раз, поэтому мой первоначальный метод просто построил SQL соответственно. Когда я пытаюсь параметризовать запрос, кажется, что предпочтительным методом массовой обработки является запуск цикла внутри соединения, как показано здесь . Я хочу, чтобы моя функция execute была независимой от объекта;Я счастлив представить строки и параметры, но я не хочу зацикливаться на своем источнике данных в методе SQL Execute.

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

1 Ответ

0 голосов
/ 15 октября 2019

Да. Самый простой способ - использовать Dapper , который может уменьшить вашу вставку до:

static int Inserts<T>(string sqlInsertString, IEnumerable<T> values)
{
    using(var connection= 
           new SqlConnection( ConnectionStringHelper.GetConnectionString() ))
    {
        return connection.Execute(sqlInsertString, values);
    }
}

static int Inserts(string sqlInsertString, DataTable values)
{
    return Inserts(sqlInsertString, values.Select();
}

public class MyType
{
    public int Field1 {get;set;}
    public string Field2 {get;set;}
    public string Etc__ {get;set;}
}

Если вы не знакомы с использованием пакетов nuget, здесь есть пошаговое руководство https://docs.microsoft.com/en-us/nuget/quickstart/install-and-use-a-package-in-visual-studio

Dapper значительно облегчает работу с базой данных SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...