我正在尝试使用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
条记录?
答案 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。