我在使用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。想法是什么?
感谢
答案 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()
}
}