我正在做一些類的最終項目,並且在大多數測試案例中,我會被要求將大量記錄插入到數據庫中,記錄將會給出在一個xml文件中。我的問題是我怎麼能插入所有這些記錄從XML到數據庫中,因爲我已經嘗試過沒有奏效。這是我到目前爲止已經完成:如何在c#中的foreach循環內插入數據到sql server中#
我從存儲過程執行插入(它確實是最終使我不能做一個批量插入要求)
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循環中插入數據或者我應該用什麼循環或方法的其他種類的任何想法?
你不打開連接 –
你已經打開的數據庫連接的默認長度是多少? – JsonStatham
獲取錯誤?如果是這樣,哪個?它不需要做一個'太快循環'。只有當循環中的代碼完成時纔會完成下一次迭代。 – Abbas