[英]How to insert data into sql server within a foreach loop in c#
我正在为某些类做最后的项目,在大多数测试用例中,系统会要求我在数据库中插入很多记录,这些记录将以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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.