如何在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循环内插入数据或我应该使用什么其他类型的循环或方法的任何想法?

如何在c#的foreach循环中插入数据到sql server中

您需要定义参数的长度,否则它们将被赋予1个字符的默认长度

CREATE PROC Createciudad(@nombre        VARCHAR(50), 
                     @codigo_postal VARCHAR(50))