私のデータベースにコミットしようとしていますが、クエリを実行しようとすると開いていないという例外が表示されています。誰も私がここで間違っていることを説明することはできますか? GetConnectionString(DbMap)
は、このコードを実行する前にテーブルを作成するために使用しているので、間違いなく正しい文字列を返します。接続が開いていません:MySql BeginTransaction
public static void InsertDataTable(DataTable dt)
{
try
{
//Open the SQL Connection
using (var dbConnection = new MySqlConnection(GetConnectionString(DbMap)))
{
dbConnection.Open();
//Instantiate the Command
using (var cmd = new MySqlCommand())
{
//Create a new Transaction
using (var transaction = dbConnection.BeginTransaction())
{
for (int i = 0; i < dt.Rows.Count; i++)
{
//var identifier = dt.Rows[i].Field<int>("Identifier");
var entry = dt.Rows[i].Field<uint>("Entry");
var name = dt.Rows[i].Field<string>("Name");
var zone = dt.Rows[i].Field<uint>("Zone");
var type = dt.Rows[i].Field<ObjectType>("Type");
//Add data value with Parameters.
cmd.Parameters.AddWithValue("@Entry", entry);
cmd.Parameters.AddWithValue("@Name", name);
cmd.Parameters.AddWithValue("@Type", type);
//Create command to execute the insertion of Data into desired Table
string dataTableName = "zone_" + zone;
cmd.CommandText = $"INSERT INTO [{dataTableName}] " +
"([entry], [name], [type]) " +
"VALUES (@Entry, @Name, @Type)";
cmd.ExecuteNonQuery();
} //for (int i = 0; i < dt.Rows.Count; i++)
//Commit the Transaction
transaction.Commit();
} //using (var transaction = dbConnection.BeginTransaction())
} //using (var cmd = new MySqlCommand())
//Close the Connection
dbConnection.Close();
}
}
catch (MySqlException ex)
{
Logger.Write("InsertDataTable | MySqlException: " + ex);
}
catch (Exception ex)
{
Logger.Write("InsertDataTable | Exception: " + ex);
}
}
あなたは、各行のための新しいコマンドを作成する必要があります。 'using(var cmd ='はループの中にあるべきです。また、C#でMySqlを頻繁に使用しませんが、コマンドと接続の間にリンクがありません。新しいMySqlCommand(dbConnection) '? – Rob
新しいMySqlCommand(dbConnection)は、私たちがforループに入るまで形成されないコマンドテキストを必要とするため、機能しません。 –