Birinin MySql ile İşlem'i nasıl kullandığımı bağlamıma bakabileceğini umuyorum. Bunun aşağıdaki ana hatlarıyla çalışması gerektiğine inanıyorum. Birisi benim koduma bakıp bana doğru bir şekilde yapıp yapmadığımı söyler mi? Teşekkür ederim. MySQL -> İşlem İçeriği -> Kod İncelemesi
bu should inanıyoruz:- örneğini db bağlantısı.
- Verilen DataTable'ın DataTable satırlarını yineleyin.
- Tablonun var olup olmadığını ve eğer yapmıyorsa Tablo Oluştur'u Yürütme olup olmadığını kontrol edin.
- Ekleme komutunu yeni oluşturulan veya var olan tabloya bilgi parametresiyle uygulayın.
İşlemi gerçekleştirin ve ardından bağlantıyı kapatın.
//Open the SQL Connection var dbConnection = new MySqlConnection(GetConnectionString(WowDatabase)); dbConnection.Open(); //Instantiate the Command using (var cmd = new MySqlCommand()) { //Create a new Transaction using (var transaction = dbConnection.BeginTransaction()) { uint lastId = 999999; for (int i = 0; i < dt.Rows.Count; i++) { //var identifier = dt.Rows[i].Field<int>("Identifier"); var id = dt.Rows[i].Field<uint>("Entry"); var name = dt.Rows[i].Field<string>("Name"); var zone = dt.Rows[i].Field<uint>("ZoneID"); var map = dt.Rows[i].Field<uint>("MapID"); var state = dt.Rows[i].Field<Enums.ItemState>("State"); var type = dt.Rows[i].Field<Enums.ObjectType>("Type"); var faction = dt.Rows[i].Field<Enums.FactionType>("Faction"); var x = dt.Rows[i].Field<float>("X"); var y = dt.Rows[i].Field<float>("Y"); var z = dt.Rows[i].Field<float>("Z"); string dataTableName = "entry_" + id; //Create Table if it does not exist. if (id != lastId) { cmd.CommandText = $"CREATE TABLE IF NOT EXISTS `{dataTableName}` (" + "`identifier` int NOT NULL AUTO_INCREMENT COMMENT 'Auto Incriment Identifier' ," + "`zone_id` int NULL COMMENT 'Zone Entry' ," + "`x_axis` float NULL COMMENT 'X Axis on Map' ," + "`y_axis` float NULL COMMENT 'Y Axis on Map' ," + "`z_axis` float NULL COMMENT 'Z Axis on Map' ," + "`situation` enum('') NULL COMMENT 'Location of the item. Underground, Indoors, Outdoors)' ," + "`faction` enum('') NULL COMMENT 'Specifies the Faction which can safely access the item.' ," + "PRIMARY KEY(`identifier`)" + ")"; cmd.ExecuteNonQuery(); lastId = id; } //Create command to execute the insertion of Data into desired Table cmd.CommandText = $"INSERT INTO [{dataTableName}] " + "([identifier], [zone_id], [x_axis], [y_axis], [z_axis], [situation], [faction], [Create_Date], [Update_Date]) " + "VALUES (@Identifier, @Zone_Id, @X_Axis, @Y_Axis, @Z_Axis, @Situation, @Faction, @Create_Date, @Update_Date)"; //Add data value with Parameters. cmd.CommandType = CommandType.Text; //cmd.Parameters.AddWithValue("@Identifier", identifier); cmd.Parameters.AddWithValue("@Identifier", id); cmd.Parameters.AddWithValue("@Zone_Id", zone); cmd.Parameters.AddWithValue("@X_Axis", x); cmd.Parameters.AddWithValue("@Y_Axis", y); cmd.Parameters.AddWithValue("@Z_Axis", z); cmd.Parameters.AddWithValue("@Situation", state); cmd.Parameters.AddWithValue("@Faction", faction); cmd.Parameters.AddWithValue("@Create_Date", DateTime.Now.Date); cmd.Parameters.AddWithValue("@Update_Date", DateTime.Now.Date); 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();
Bunun için teşekkürler, değişiklikleri ekledim. Yani, sözdizimi bir kenara, İşlemi kullanmam doğru muydu? Yineleme ile sql komutlarını yürütür ve sonra döngü için tamamlandığında bunları işler mi? –
John'un ortaya çıkardığı sorunun bir sorun olmadığını varsayarak (CREATE TABLE çağrıları tarafından tetiklenen işlemlerle), iyi görünüyor. –