使用1个连接插入MySQL数据库(C#.NET)

时间:2011-05-09 09:12:51

标签: c# mysql

我在使用C#将多行插入MySQL数据库时遇到问题,请使用以下代码;

//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。想法是什么?

感谢

4 个答案:

答案 0 :(得分: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 :(得分:2)

看起来连接在foreach循环中。它应该在foreach循环之外。

conn.Close();应该在foreach循环之外。

答案 2 :(得分:1)

如何使用

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

这被转换为try final block ..所以应该注意你的连接困境。

答案 3 :(得分:0)

将finally块添加到try catch代码并将conn.close()放入it.like

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