2011-05-09 78 views
0

我在使用C#將多行插入到MySQL數據庫時遇到問題,請使用以下代碼;使用1個連接插入MySQL數據庫(C#.NET)

//Upload to mysql 
      string connStr = "server=server;user=username;database=databasae;port=3306;password=password;"; 
      MySqlConnection conn = new MySqlConnection(connStr); 

      conn.Open(); 

      foreach (Channel chan in results) 
      { 
       // Perform databse operations 
       try 
       { 
        //Create sql statment with parameters 
        string sql = "INSERT INTO channels(ID, Name) VALUES (@id,@name)"; 
        MySqlCommand cmd = new MySqlCommand(sql, conn); 
        cmd.Parameters.AddWithValue("@id", chan.ID); 
        cmd.Parameters.AddWithValue("@name", chan.Name); 
        cmd.ExecuteNonQuery(); 
        updateStatus("Inserted"); 

       } 


       catch (Exception ex) 
       { 
        updateStatus(ex.Message.ToString()); 
       } 
       conn.Close(); 

我似乎越來越「連接必須是有效的和開放的」。從我可以看到我正確傳遞連接字符串,並使用ExecuteNonQuery。和想法?

感謝

+0

檢查'conn.Open()'後的連接狀態是否正常? – Marco 2011-05-09 09:15:23

+2

您是否在foreach結尾處關閉連接?如果是的話,你應該在foreach循環不在裏面之後這樣做。除了這個例子,你也缺少}關閉foreach循環。 – Ruben 2011-05-09 09:16:01

+0

在循環外部創建Command和Parameter對象會更高效。然後,您可以更改這兩個參數的值,並在循環內調用「ExecuteNonQuery」。 – 2011-05-09 19:05:08

回答

2

貌似連接foreach循環中。它應該在foreach循環之外。

conn.Close();應位於foreach循環之外。

+0

我愚蠢愚蠢的錯誤,什麼是白癡!大聲笑我真的需要學習這走開15分鐘,如果你有一個問題! – Nathan 2011-05-09 09:52:03

+0

沒關係。發生在每個人身上,這就是我們有stackoverflow的原因;)。乾杯! – Tushar 2011-05-09 09:56:08

0

加finally塊的嘗試捕捉代碼,並把conn.close()在it.like

finally 
{ 
    if(conn.ConnectionSTate=Connectionstate.open) 
      { 
       conn.close() 
      } 
} 
3

conn.Close();應該是在foreach之外。 下面將工作:

  //Upload to mysql 
     string connStr = "server=server;user=username;database=databasae;port=3306;password=password;"; 
     MySqlConnection conn = new MySqlConnection(connStr); 

     conn.Open(); 

     foreach (Channel chan in results) 
     { 
      // Perform databse operations 
      try 
      { 
       //Create sql statment with parameters 
       string sql = "INSERT INTO channels(ID, Name) VALUES (@id,@name)"; 
       MySqlCommand cmd = new MySqlCommand(sql, conn); 
       cmd.Parameters.AddWithValue("@id", chan.ID); 
       cmd.Parameters.AddWithValue("@name", chan.Name); 
       cmd.ExecuteNonQuery(); 
       updateStatus("Inserted"); 

      } 


      catch (Exception ex) 
      { 
       updateStatus(ex.Message.ToString()); 
      } 
      } 
      conn.Close(); 
1

如何使用

using(MySqlConnection conn = new MySqlConnection(connStr)) 
{ 
//your stuff in here 
} 

這變成了一個嘗試最終塊..所以應該把你的連接困境的照顧。