如何在c#的foreach循环中插入数据到sql server中
本文关键字:插入 数据 sql server 循环 foreach | 更新日期: 2023-09-27 18:03:21
我正在做一些类的最终项目,在大多数测试用例中,我将被要求将大量记录插入数据库,记录将在xml文件中给出。我的问题是我怎么能从xml插入所有这些记录到数据库中,因为我所尝试的没有工作。下面是我到目前为止所做的:
我正在从存储过程中进行插入(这确实是最终的要求,因此我不能进行批量插入)
c#XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(IdeaEvaluation.Properties.Resources.Cities);
XmlNode root = xmldoc.DocumentElement;
XmlNodeList nodeList = root.SelectNodes("/Ciudades/Ciudad");
string nombre = string.Empty;
string codigo_postal = string.Empty;
foreach (XmlNode node in nodeList)
{
nombre = node["nombre"].InnerText;
codigo_postal = node["codigo_postal"].InnerText;
try
{
using (SqlCommand cmd = new SqlCommand("dbo.CreateCiudad", conn) { CommandType = CommandType.StoredProcedure })
{
cmd.Parameters.Add("@nombre", SqlDbType.VarChar, 10).Value = nombre;
cmd.Parameters.Add("@codigo_postal", SqlDbType.VarChar, 6).Value = codigo_postal;
string text = cmd.CommandText;
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
一切工作正常,直到它得到执行插入,然后我不知道发生了什么,它从不插入一行或任何东西。我认为这是因为它没有时间执行插入操作,因为循环继续快速循环。
下面是存储过程
CREATE PROC Createciudad(@nombre VARCHAR,
@codigo_postal VARCHAR)
AS
BEGIN
IF NOT EXISTS(SELECT *
FROM dbo.codigo_postal
WHERE codigo_postal = @codigo_postal)
INSERT INTO dbo.codigo_postal
(codigo_postal)
VALUES (@codigo_postal);
IF NOT EXISTS(SELECT *
FROM dbo.ciudad
WHERE nombre = @nombre
AND codigo_postal = @codigo_postal)
INSERT INTO dbo.ciudad
(nombre,
codigo_postal)
VALUES (@nombre,
@codigo_postal);
END;
关于如何在foreach循环内插入数据或我应该使用什么其他类型的循环或方法的任何想法?
您需要定义参数的长度,否则它们将被赋予1个字符的默认长度
CREATE PROC Createciudad(@nombre VARCHAR(50),
@codigo_postal VARCHAR(50))