Должен ли я выполнить каждый запрос или отдельный запрос? - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь вставить несколько записей в таблицу, используя ado.net, и печатать id вставлено.

Мой код такой:

List<string> listQuery = new List<string>()
{
    "INSERT INTO Students (Name) VALUES ('student1');SELECT @@Identity;",
    "INSERT INTO Students (Name) VALUES ('student2');SELECT @@Identity;",
    "INSERT INTO Students (Name) VALUES ('student3');SELECT @@Identity;",
};
using (SqlConnection connection = new SqlConnection(_connectionString))
{
    try
    {
        connection.Open();
        using (SqlCommand command = new SqlCommand())
        {
            command.Connection = connection;

            foreach (var myQuery in listQuery)
            {
                command.CommandText = myQuery;
                int id = Convert.ToInt32((decimal)command.ExecuteScalar());
                Console.WriteLine("Inserted: " + id);
            }
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        //Close and dispose
        connection.Close();
    }
}

Интересно,я должен выполнить каждую команду, как это? Или объединить все запросы и выполнить только раз?.

Если я должен выполнить один раз. Как я могу получить все id вставленных записей?

Ответы [ 2 ]

3 голосов
/ 31 октября 2019

вы можете использовать предложение OUTPUT для возврата идентификатора id

INSERT INTO Students (Name)
OUTPUT  INSERTED.id
VALUES ('student1'), ('student2'), ('student3');
0 голосов
/ 31 октября 2019

Не делайте так, и НЕ вызывайте базу данных в ЛЮБОМ цикле.

Для решения вашей проблемы вы должны написать хранимую процедуру, которая принимает DataTable в качестве ввода вашего списка студентов (учебник ) или используйте JSON string в качестве входных данных. В этой хранимой процедуре вы используете предложение OUTPUT для получения идентификатора: OUTPUT INSERTED.id. В коде C # вам нужно всего лишь ExecuteReader, чтобы получить все идентификаторы.

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