2016-03-29 23 views
2

Unity içinde SQLite ile çalışıyorum ve başlangıç ​​ekranında oyun tarafından oluşturulan bir tablodan veri yükleme sorunları yaşıyorum. Herhangi bir hata alamıyorum ve "reader.HasRows" çağrım doğrudur. Ancak, verileri bir DataTable'a yüklemeye çalıştığımda hiçbir şey alamıyorum. Daha önce C# ile SQLite kullanmıştım ve bu kodu referans olarak kullanıyorum ama daha önce hiç böyle bir sorun yaşamadım.DataTable.Load() veri alma işlemi ExecuteReader()

ScoreControl.cs: okuyucu kesinlikle bir şey alır, böylece

using (SqliteConnection dbCon = new SqliteConnection("Data Source=" + Application.dataPath + "MainScoreDB.sqlite3")) 
{ 
    if (dbCon.State != ConnectionState.Open) 
     dbCon.Open(); 
    string query = "SELECT * FROM highscores"; 

    SqliteCommand command = new SqliteCommand(query, dbCon); 
    SqliteDataReader reader = command.ExecuteReader(); 

    if(reader.HasRows) 
    { 
     Scores.Load(reader); 
    } 
    else 
    { 
     Debug.Log("No Data was Returned"); 
    } 


    if (dbCon.State == ConnectionState.Open) 
     dbCon.Close(); 
} 

else ateş asla. Ben burada bir kayıp var, ben veritabanı (s3db, sqlite, sqlite3) birden çok biçimini denedim ama hepsi aynı sonucu var. Ayrıca hata da almıyorum.

Application.dataPath kök proje klasörünün atıfta

, ben veritabanı ve tablo oluşturmak, hem de onu referans için kullanabilirsiniz DÜZENLEME yüzden doğru veritabanı sorgulama olduğunu biliyorum, Ayrıca tablo olmadan bir veritabanı yaptım ve bir hata var, bu yüzden veritabanına erişiyor biliyorum.

Scores.Load(), DataTable öğesindeki bir yöntem okuyucunun döndürdüğü verileri girerek yükler.

Bu nedenle while döngüsünün doğru süreden geçtiği görülür, ancak hiçbir şey geri dönmez. Veritabanından çıkan veri türünü yönetmem gerekiyor mu?

+0

Application.dataPath için değeri nedir:

SqlLite için bir DataTable doldurmak için uygun bir yol olarak görünüyor? Doğru veri tabanını soruyor muydun? – Steve

+0

Bir dosya adıyla bir yolu birleştirirken, Path.Combine() öğesini kullanın. Herhangi bir [potansiyel olarak eksik] ters eğik çizgi ile ilgilenecektir. – djv

+1

Sanırım Scores.Load yönteminizi görmemiz gerekiyor, çünkü diğerleri burada iyi görünüyor. Ayrıca, deyim hata ayıkladığınızda ne görüyorsunuz? Satırları kolayca gözden geçirebilirdiniz, bu da kayıtları doğru bir şekilde getirdiğinizden emin olmanızı sağlar. Bir yan not olarak –

cevap

1

Veri okuyucunuzda Oku'yı aramayı unutuyorsunuzdur. İlk satırı okumadan önce imleç başlangıç ​​aşamasındadır. Okuyucu, tüm hareketli satırlar boyunca ilerlemek için bir süre çalışmayı deneyin.

if (reader.HasRows) 
{  
    while (reader.Read())  
    { 
     // Load each row 1 at a time here  
    } 
} 

Referans:

https://www.devart.com/dotconnect/sqlite/docs/Devart.Data.SQLite~Devart.Data.SQLite.SQLiteDataReader~HasRows.html

DÜZENLEME

veri adaptörü Bir deneyin ve daha iyi davranır veya sizi yanlış olana başka ipucu verir bakın. mayın hariç

SQLiteDataAdapter da = new SQLiteDataAdapter(dbCommand); 
da.Fill(scores); 
+0

Sadece bunu denedim, bir kez döngüden geçti ve sonra hiçbir şey vermedi, tabloda 3 giriş var. – geolaw

+0

Bir kesme noktası belirlediniz ve okuyucunuzda okuyucunun hangi verileri olduğunu kontrol ettiniz mi? Örneğin ilk döngü geçerli bir satır mı? –

+0

Ayrıca, bir veri okuyucusu yapmak yerine bir veri yoluna geçebilir ve bu bir Yükleme işlevini destekleyecektir. –

1

Ben benzer bir sorun yaşıyordu,

nedense DataTable sadece bunu borçlu olduğu tüm satırları almıyor olmasıydı.

DataTable dt = new DataTable(); 
SQLiteConnection cnn = new SQLiteConnection(dbConnection); 
cnn.Open(); 
SQLiteCommand mycommand = new SQLiteCommand(cnn); 
mycommand.CommandText = sql; 
SQLiteDataAdapter adapter = new SQLiteDataAdapter(mycommand); 
adapter.Fill(dt); 
cnn.Close(); 
İlgili konular