Oracle Dizileri

Oracle için .NET Framework Veri Sağlayıcısı, kullanarak OracleDataAdaptereklemeleri gerçekleştirdikten sonra sunucu tarafından oluşturulan anahtar Oracle Sequence değerlerini almak için destek sağlar.

SQL Server ve Oracle, birincil anahtar olarak belirlenebilecek otomatik olarak artan sütunların oluşturulmasını destekler. Bu değerler, tabloya satırlar eklendikçe sunucu tarafından oluşturulur. SQL Server'da bir sütunun Identity özelliğini ayarlarsınız; Oracle'da bir Sıra oluşturursunuz. SQL Server'da sütunları otomatik artırma ile Oracle'daki diziler arasındaki fark şudur:

  • SQL Server'da bir sütunu otomatik artırma sütunu olarak işaretlersiniz ve yeni bir satır eklediğinizde SQL Server sütun için otomatik olarak yeni değerler oluşturur.

  • Oracle'da, tablonuzdaki bir sütun için yeni değerler oluşturmak üzere bir dizi oluşturursunuz, ancak sıra ile tablo veya sütun arasında doğrudan bağlantı yoktur. Oracle dizisi, tablo veya saklı yordam gibi bir nesnedir.

Oracle veritabanında bir dizi oluşturduğunuzda, ilk değerini ve değerleri arasındaki artışı tanımlayabilirsiniz. Ayrıca, yeni satır göndermeden önce sırayı yeni değerler için sorgulayabilirsiniz. Bu, kodunuzun yeni satırları veritabanına eklemeden önce anahtar değerlerini tanıyabileceği anlamına gelir.

SQL Server ve ADO.NET kullanarak otomatik artırma sütunları oluşturma hakkında daha fazla bilgi için bkz . Kimlik veya Otomatik Sayı Değerlerini Alma ve Otomatik Ölçeklendirme Sütunları Oluşturma.

Örnek

Aşağıdaki C# örneği, Oracle veritabanından yeni sıra değerlerini nasıl alabildiğinizi gösterir. Örnek, yeni satırları göndermek için kullanılan INSERT INTO sorgusundaki diziye başvurur ve ardından Oracle10g'da tanıtılan RETURNING yan tümcesi kullanılarak oluşturulan sıra değerini döndürür. Örnek, "yer tutucu" birincil anahtar değerleri oluşturmak için ADO.NET'in otomatik artırma işlevini kullanarak bir DataTable dizi bekleyen yeni satır ekler. Yeni satır için oluşturulan ADO.NET artım değerinin yalnızca bir "yer tutucu" olduğunu unutmayın. Bu, veritabanının ADO.NET değerlerden farklı değerler oluşturabileceği anlamına gelir.

Bekleyen eklemeleri veritabanına göndermeden önce, örnekte satırların içeriği görüntülenir. Ardından kod yeni OracleDataAdapter bir nesne oluşturur ve nesnesini InsertCommand ve UpdateBatchSize özelliklerini ayarlar. Örnek ayrıca çıkış parametrelerini kullanarak sunucu tarafından oluşturulan değerleri döndürme mantığını sağlar. Ardından, örnek bekleyen satırları göndermek için güncelleştirmeyi yürütür ve içeriğini DataTablegörüntüler.

public void OracleSequence(String connectionString)  
{  
   String insertString =
      "INSERT INTO SequenceTest_Table (ID, OtherColumn)" +  
      "VALUES (SequenceTest_Sequence.NEXTVAL, :OtherColumn)" +  
      "RETURNING ID INTO :ID";  
  
   using (OracleConnection conn = new OracleConnection(connectionString))  
   {  
      //Open a connection.  
      conn.Open();  
      OracleCommand cmd = conn.CreateCommand();  
  
      // Prepare the database.  
      cmd.CommandText = "DROP SEQUENCE SequenceTest_Sequence";  
      try { cmd.ExecuteNonQuery(); } catch { }  
  
      cmd.CommandText = "DROP TABLE SequenceTest_Table";  
      try { cmd.ExecuteNonQuery(); } catch { }  
  
      cmd.CommandText = "CREATE TABLE SequenceTest_Table " +  
                     "(ID int PRIMARY KEY, OtherColumn varchar(255))";  
      cmd.ExecuteNonQuery();  
  
      cmd.CommandText = "CREATE SEQUENCE SequenceTest_Sequence " +  
                        "START WITH 100 INCREMENT BY 5";  
      cmd.ExecuteNonQuery();  
  
      DataTable testTable = new DataTable();  
      DataColumn column = testTable.Columns.Add("ID", typeof(int));  
      column.AutoIncrement = true;  
      column.AutoIncrementSeed = -1;  
      column.AutoIncrementStep = -1;  
      testTable.PrimaryKey = new DataColumn[] { column };  
      testTable.Columns.Add("OtherColumn", typeof(string));  
      for (int rowCounter = 1; rowCounter <= 15; rowCounter++)  
      {  
         testTable.Rows.Add(null, "Row #" + rowCounter.ToString());  
      }  
  
      Console.WriteLine("Before Update => ");  
      foreach (DataRow row in testTable.Rows)  
      {  
         Console.WriteLine("   {0} - {1}", row["ID"], row["OtherColumn"]);  
      }  
      Console.WriteLine();  
  
      cmd.CommandText =
        "SELECT ID, OtherColumn FROM SequenceTest_Table";  
      OracleDataAdapter da = new OracleDataAdapter(cmd);  
      da.InsertCommand = new OracleCommand(insertString, conn);  
      da.InsertCommand.Parameters.Add(":ID", OracleType.Int32, 0, "ID");  
      da.InsertCommand.Parameters[0].Direction = ParameterDirection.Output;  
      da.InsertCommand.Parameters.Add(":OtherColumn", OracleType.VarChar, 255, "OtherColumn");  
      da.InsertCommand.UpdatedRowSource = UpdateRowSource.OutputParameters;  
      da.UpdateBatchSize = 10;  
  
      da.Update(testTable);  
  
      Console.WriteLine("After Update => ");  
      foreach (DataRow row in testTable.Rows)  
      {  
         Console.WriteLine("   {0} - {1}", row["ID"], row["OtherColumn"]);  
      }  
      // Close the connection.  
      conn.Close();  
   }  
}  

Ayrıca bkz.