繁体   English   中英

如何在C#中的foreach循环中将数据插入SQL Server

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM