2009-02-04 15 views
8

'dan DataSet'i Doldurmak için en iyi yöntem DataReader'ı Eşzamansız olarak alan bir DAL üzerinde çalışıyorum.SQLDataReader

DataReader'ı DataSet'e dönüştürmek için tek bir yöntem yazmak istiyorum. Farklı bir şemayı ele alması gerekiyor, böylece bu tek yöntem tüm getirme gereksinimlerini karşılayacaktır.

P.S. SQLDataReader'ı zaman uyumsuz olarak dolduruyorum, lütfen DataReader'dan kurtulmaya yönelik yanıtlar vermeyin.

+0

DataSet.Load oldu (:

 DataTable dt = new DataTable(); dt = sdr.GetSchemaTable(); //dt.Constraints.Clear(); //dt.PrimaryKey = null; //dt.BeginLoadData(); if (sdr.HasRows) { DataRow row; while (sdr.Read()) { row = dt.NewRow(); sdr.GetValues(row.ItemArray); dt.Rows.Add(row); } 

bir başka yolu kullanmak SqlTableAdapter olduğunu) iyi değil? http://msdn.microsoft.com/en-us/library/5fd1ahe2.aspx –

+0

Aslında bu seçeneğin farkında değildim. .Net çerçevesinin sürüm 5 vb. Içinde ne kadar karmaşık olacağını görmek için sabırsızlanıyorum –

+0

Ya ben, o Matt için teşekkürler! – Phaedrus

cevap

9

DataSet.Load()'u deneyin. IDataReader alarak birkaç aşırı yüklenme var. Genel bir yaklaşım için

+0

Bir DataTable (aynı yönteme sahip) kullanılarak sonlandırıldı –

+2

üçüncü parametre olarak [] veya DataTable [] dizesi gerekiyor. Önceden kendi şemasını bilmeden boş bir DataSet'i hiçbir tablo olmadan doldurmanın bir yolu var mı? Ayrıca bu çözüm, DataSet.Load() SqlDataReader – KolA

14

DataTable.load() kullanılabilir.

do { 
    var table = new DataTable(); 
    table.Load(reader); 
    dataset.Tables.Add(table); 
} while(!reader.IsClosed); 
+0

ReadAsync() ve NextResultAsync() yöntemlerinden yararlanmayacağı gibi kısmen engelleniyor gibi görünüyor Bu sorulan soruya yanıtı. Teşekkürler. – mcNux

0

Yük yöntemi başarısız nedense, burada bunu yapmak için bir manuel yolu ise:

var adapter = new SqlDataAdapter(command); 
DataSet ds = new DataSet(); 
adapter.Fill(ds); 
İlgili konular