Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该执行每个查询还是单个查询?_C#_Sql Server_Ado.net - Fatal编程技术网

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

C# 我应该执行每个查询还是单个查询?,c#,sql-server,ado.net,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;", "I

我试图使用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?

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

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


不要这样做,也不要在任何循环中调用数据库


为了解决您的问题,您应该编写存储过程,将数据表作为学生列表的输入或用作输入。在该存储过程中,使用OUTPUT子句检索id:OUTPUT INSERTED.id。在C代码中,您只需要ExecuteReader就可以获得所有id。

不要这样做,也不要在任何循环中调用数据库


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

您可以一次插入多行并使用输出子句返回id您可以一次插入多行并使用输出子句或输出插入.id返回id,INSERTED.Name以获取可以映射到源代码的内容。请编写一些代码以获取所有id。如果使用OUTPUT子句,则需要使用ExecuteReader。对吗?或者输出INSERTED.id,INSERTED.Name以获取可以映射到源代码的内容。请编写一些代码以获取所有id。如果使用OUTPUT子句,则需要使用ExecuteReader。是吗?虽然我倾向于同意你的观点,但如果你能展示一些代码来解释如何进行这项工作,那就更好了。虽然我倾向于同意你的观点,但如果你能展示一些代码来解释如何进行这项工作,那就更好了。
INSERT INTO Students (Name)
OUTPUT  INSERTED.id
VALUES ('student1'), ('student2'), ('student3');