2014-05-23 92 views
4

我在Asp.net新我試着從一個文件中讀取並存儲到數據庫 文件形式:(讀數測試,它是很好的)天冬氨酸插入錯誤

 0101;23/05/2014 
     0602;23/05/2014 
     0301;23/05/2014 
     1103;23/05/2014 
     0201;23/05/2014 
     1704;23/05/2014 
     *************** 


     string[] lines = System.IO.File.ReadAllLines(@"C:\Users\user\Desktop\file.txt"); 
     SqlConnection connexion = new SqlConnection(@"Data Source=    (LocalDB)\v11.0;AttachDbFilename=C:\Users\user\Desktop\controle\miniprojet\miniprojet\App_Data\ariche.mdf;Integrated Security=True"); 
     SqlCommand command = connexion.CreateCommand(); 
     String requete = "INSERT INTO commande VALUES(@idpr,@date)"; 
     SqlParameter paramidprod; 
     SqlParameter paramdate; 
     connexion.Open(); 
     res.Text="Contents of file.txt = "; 
     foreach (string line in lines) 
     { 
      if (line.Contains('*')) break; 
      String[] l = line.Split(';'); 
      paramidprod=new SqlParameter("@idpr", line.Substring(0,2)); 
      paramdate = new SqlParameter("@date", l[1]); 
      command.Parameters.Add(paramidprod); 
      command.Parameters.Add(paramdate); 
      command.CommandText = requete; 
      command.ExecuteNonQuery(); 
      res.Text += "<br>" + l[1] +" "+ line.Substring(0, 2); 
     } 
     connexion.Close(); 
     connexion.Dispose(); 

當我跑我thsi問題的程序:

The variable name '@idpr' has already been declared. Variable names must be unique 
within a query batch or stored procedure. 

你能確定我迷路了PLZ

回答

2

你是循環的錯誤,每次添加新的參數循環運行。第二次和隨後的調用將因此失敗。

任一組新的命令參數每個迴路,或者只是一次創建的參數,然後重新分配他們每個循環。

這裏的第二個選項 - 重複使用相同的參數 - 你似乎有這將是一個循環情景更好的性能:

var connexion = new SqlConnection(@"Data Source=..."); 
    var command = connexion.CreateCommand(); 
    var requete = "INSERT INTO commande VALUES(@idpr,@date)"; 
    // I've assumed the types - double check 
    var paramidprod = new SqlParameter("@idpr", SqlDbType.VarChar); 
    var paramdate = new SqlParameter("@date", SqlDbType.DateTime); 
    command.Parameters.Add(paramidprod); 
    command.Parameters.Add(paramdate); 
    command.CommandText = requete; 
    connexion.Open(); 

    foreach (string line in lines) 
    { 
     if (line.Contains('*')) break; 
     String[] l = line.Split(';'); 
     paramidprod.Value = line.Substring(0,2); 
     paramdate.Value = l[1]; 
     command.ExecuteNonQuery(); 
    } 
    connexion.Close(); 
    connexion.Dispose(); 

如果插入真正的大量的記錄,你也可以考慮每個約1000個插入提交事務。

2

注意在每次迭代要插入相同的參數到SqlCommand對象。你需要在這之前清除以前的:

foreach (string line in lines) 
{ 
    command.Parameters.Clear();