1 Son düzenleyen, Aligocmen (17.08.2013 07:19:10)

Konu: ODBC bağlantısını kesme

Arkadaşlar selam,

Bir Sql Server tablosundaki kayıtları, ODBC ile bağlandığım MySQL Veritabanına gönderiyorum.

Doğal olarak bu kayıtları bir döngü içerisinde gönderiyorum. Bu döngü örneğin 10.000 kez dönecek. Her seferinde ODBC bağlatısını oluşturup, kapatmak zorundamıyım. Performans nasıl etkilenir.

Visual Fox Pro
For i =1 to 10000

        Dim MyConn As New OdbcConnection(ConfigurationSettings.AppSettings("ConnectionString"))
        Dim Cmd As New OdbcCommand("insert into test values ('',?,?)", MyConn)
 
        Cmd.Parameters.Add(Nothing,test)
        Cmd.Parameters.Add(Nothing,test1)
 
        Try
            MyConn.Open()
            Cmd.ExecuteNonQuery()
        Finally
            MyConn.Close()
            MyConn.Dispose()
        End Try
Next

2

Re: ODBC bağlantısını kesme

Ben şahsen öyle yapmazdım / yapmiyorum.
Kayıda başlamadan evvel bir handle al, onunla çalış, işin bitince bağlantıyı kes.

Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

3

Re: ODBC bağlantısını kesme

Aligocmen yazdı:

Arkadaşlar selam,

Bir Sql Server tablosundaki kayıtları, ODBC ile bağlandığım MySQL Veritabanına gönderiyorum.

Doğal olarak bu kayıtları bir döngü içerisinde gönderiyorum. Bu döngü örneğin 10.000 kez dönecek. Her seferinde ODBC bağlatısını oluşturup, kapatmak zorundamıyım. Performans nasıl etkilenir.

Visual Fox Pro
For i =1 to 10000

        Dim MyConn As New OdbcConnection(ConfigurationSettings.AppSettings("ConnectionString"))
        Dim Cmd As New OdbcCommand("insert into test values ('',?,?)", MyConn)
 
        Cmd.Parameters.Add(Nothing,test)
        Cmd.Parameters.Add(Nothing,test1)
 
        Try
            MyConn.Open()
            Cmd.ExecuteNonQuery()
        Finally
            MyConn.Close()
            MyConn.Dispose()
        End Try
Next

MySQL'de de oyle mi bilemiyorum ama transaction nedeniyle ve diskin donmesine bagli her kaydin yapilmasi yavas. Bu sekilde yaparsan (MySQL'de de oyle olmasi lazim diye dusunerek) bu yavaslik 10000 kayitta dayanilmaz boyutlara ulasabilir (test etmesi kolay, iki turlu de dene, birisi aninda islemi bitirir, digerinde bekliyorsan MySQL'de de transaction problem ayni sekilde var demektir) - VB benim icin roket muhandisligi gibi birsey, onun icin C# yaziyorum umarim farketmez:



C#
using (OdbcConnection myCon= new OdbcConnection(ConfigurationSettings.AppSettings("ConnectionString")))

{
  OdbcCommand cmd = new OdbcCommand("insert into test values ('',?,?)", nyCon);
  cmd.Parameters.AddWithValue( "p1", 0 ); // tipi her ne ise
  cmd.Parameters.AddWithValue( "p2", "" ); // tipi her ne ise
 
  myCon.Open();
  OdbcTransaction t = myCon.BeginTransaction();
  for (int i = 0; i < 10000; i++)
  {
    cmd.Parameters["p1"].Value = i;
    cmd.Parameters["p2"].Value = string.Format("String no:{0}",i);
    cmd.ExecuteNonQuery();
  }
  t.Commit();
  myCon.Close();
}