我应该执行每个查询还是执行单个查询?

时间:2019-10-31 02:57:31

标签: c# sql-server ado.net

我正在尝试使用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 个答案:

答案 0 :(得分:3)

您可以使用OUTPUT子句返回标识id

INSERT INTO Students (Name)
OUTPUT  INSERTED.id
VALUES ('student1'), ('student2'), ('student3');

答案 1 :(得分:0)

别这样,不要在ANY循环中调用数据库。

为解决问题,您应该编写将DataTable用作学生列表(tutorial)输入或使用JSON string作为输入的存储过程。在该存储过程中,使用OUTPUT子句检索ID:OUTPUT INSERTED.id。在C#代码上,您只需要ExecuteReader即可获取所有ID。