2009-03-03 7 views
2

Aşağıdaki kod bir Oracle veritabanına bağlanmak ve verileri bir DataTable'a doldurmak için yapılan bir testtir. da.Fill (dt) ifadesini çalıştırdıktan sonra;, hep Verileri DataTable'a doldurmaya çalışırken her zaman istisna elde edin

istisna olsun "türü 'System.OutOfMemoryException' türünde özel durum oluşturuldu."

Bu tür bir hatayla karşılaştı mı? Projem VS 2005'te çalışıyor ve Oracle veritabanı versiyonum 11g. Bilgisayarım Windows Vista kullanıyor. Bu kodu Windows XP'de çalışacak şekilde kopyalarım, iyi çalışır.

Teşekkür ederiz.

using System.Data; 
using Oracle.DataAccess.Client; 

... 

string cnString = "data source=net_service_name; user id=username; password=xxx;"; 
OracleDataAdapter da = new OracleDataAdapter("select 1 from dual", cnString); 

try 
{ 
    DataTable dt = new DataTable(); 
    da.Fill(dt); // Got error here 
    Console.Write(dt.Rows.Count.ToString()); 

} 
catch (Exception e) 
{ 
    Console.Write(e.Message); // Exception of type 'System.OutOfMemoryException' was thrown. 
} 

Güncelleme benim bilgisayarınıza ne hiçbir fikrim yok. Sadece Oracle 11g'yi yeniden yükledim ve kodum normal çalışıyor.

+0

Her iki bilgisayarda da Oracle sürücüleri ve .NET veri sağlayıcısı aynı sürümleri var mı? Vista için Oracle sürücüleri için herhangi bir yol var mı, yüklemediniz? –

cevap

0

Senin dual tablonuz ne kadar büyük? Bu sorgu:

select 1 from dual 

her satırda 1'den, dual masaya kadar sayıda satır içeren bir tek sütunlu bir tablo döndürür. Tablonun milyonlarca satırı varsa, o zaman bir bellek istisnası attıysa beni şaşırtmayacaktır.

Edit Elbette, bu, uygulamaya özgü bir şey olmadığı sürece (örneğin, iki farklı iş istasyonunda farklı bir veritabanının farklı bir örneğini sorgulama), XP'de neden çalışacağını açıklayamaz, ancak Vista'da çalışmaz.

Düzenleme 2: Yorumunuz Sorgu yalnızca tek bir satırı döndürür gösterir beri

Tamam, muhtemelen dual sadece bir satır vardır.

Birkaç şey araştırmak için:

  1. Oracle ADO.NET bağlantısı şu Oracle istemci yazılımı gerektirir? Vista kutunuzdaki Oracle yazılımı XP kutusundakiyle aynı mı? Belki orada bir tutarsızlık var.

  2. yerine e.Message gösteren, tam bir yığın izleme almak için e.ToString() gösteren deneyin - bu hata atılan ediliyor nereye doğru daha iyi anlayabilmeniz olabilir.

+0

Sorgu, yalnızca 1 satırı döndürür ve değer 1'dir. –

+0

Oracle'da MS SQL Sever'de olduğu gibi "1'i seç" yazamazsınız. Ama ikili bir "yalancı" var, böylece "ikiliden 1'i seç" yazıp aynı sonucu elde edebilirsiniz. Bakınız: "http://en.wikipedia.org/wiki/DUAL_table". –

+0

Ah iyi bilmek - teşekkürler @tomekszpakowicz! –