2012-11-09 4 views
0

내가 작업하고있는 데이터 입력 창 8 응용 프로그램에 SQLite를 사용하고 있습니다. db를 만들고, 데이터를 삽입하고, 열 수를 검색하고, 데이터를 읽을 수는 있지만 열 이름을 가져올 수는 없습니다.sqlite 테이블 창에서 열 이름 읽기 8 앱

기본 프레임 워크는 post입니다.

나는 PRAGMA table_info(table_name); 명령에 대해 읽었지만이 쿼리를 제대로 보내고 다시 읽을 수는 없습니다. 나는 3 일 동안 인터넷 검색을 해왔다.

MainPage.xaml.cs를 다음 정보를

using SQLite; 
using SqlLiteTest.Model; 
using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Linq; 
using Windows.Storage; 
using Windows.UI.Popups; 
using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls; 

namespace SqlLiteTest 
{ 
    public sealed partial class MainPage : Page 
    { 
     public MainPage() 
     { 
      this.InitializeComponent(); 
      txtPath.Text = ApplicationData.Current.LocalFolder.Path; 
     } 

     private async void createDB(object sender, RoutedEventArgs e) 
     { 
      // access local folder 
      var qvLocalFolder = Windows.Storage.ApplicationData.Current.LocalFolder; 

      try 
      { 
       //Create a blank carrier file 
       StorageFile qvLocalFileCarrier = await qvLocalFolder.CreateFileAsync("qvdbLocal.db", CreationCollisionOption.FailIfExists); 

       //Write the blank carrier file 
       await FileIO.WriteTextAsync(qvLocalFileCarrier, ""); 
      } 
      catch { } 

      // connect 
      var path = Windows.Storage.ApplicationData.Current.LocalFolder.Path + @"\qvdbLocal.db"; 
      var db = new SQLiteAsyncConnection(path); 

      // create table 
      await db.CreateTableAsync<qvdb>(); 

      // insert data 
      var insertRecords = new List<qvdb>() 
      { 
       new qvdb 
       { 
          qvdbRecord = 1, 
          qvdbNotes = "Notes1", 
          qvdb001 = "Variable 1.1", 
          qvdb002 = "Variable 2.1" 
        }, 
        new qvdb 
        { 
          qvdbRecord = 1, 
          qvdbNotes = "Notes1", 
          qvdb001 = "Variable 1.1", 
          qvdb002 = "Variable 2.1" 
        }, 
        new qvdb 
        { 
          qvdbRecord = 1, 
          qvdbNotes = "Notes1", 
          qvdb001 = "Variable 1.1", 
          qvdb002 = "Variable 2.1" 
        }, 
      }; 

      await db.InsertAllAsync(insertRecords); 

      // read count 
      var allUsers = await db.QueryAsync<qvdb>("SELECT * FROM qvdb"); 
      var count = allUsers.Any() ? allUsers.Count : 0; 

      Debug.WriteLine(count); 
     } 

     private async void updateDB(object sender, RoutedEventArgs e) 
     { 
      var path = Windows.Storage.ApplicationData.Current.LocalFolder.Path + @"\qvdbLocal.db"; 
      var db = new SQLiteAsyncConnection(path); 

      var tempCell = db.QueryAsync<qvdb>("UPDATE qvdb SET qvdbNotes ='[email protected]#$%$%^^&*()+)(*&^%$#@!{:L<>?' WHERE qvdbRecord = 10"); 
      await db.UpdateAsync(tempCell); 
     } 

     private async void readDB(object sender, RoutedEventArgs e) 
     { 
      var path = Windows.Storage.ApplicationData.Current.LocalFolder.Path + @"\qvdbLocal.db"; 
      var db = new SQLiteAsyncConnection(path); 

      var query = db.Table<qvdb>(); 
      var result = await query.ToListAsync(); 
      foreach (var item in result) 
      { 
       MessageDialog dialog = new MessageDialog(string.Format("{0} {1} {2}", item.qvdbRecord, item.qvdbNotes, item.qvdb001)); 
       await dialog.ShowAsync(); 
      } 
     } 

     private void readColNames(object sender, RoutedEventArgs e) 
     { 
     } 
    } 
} 

qvdb.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using SQLite; 

namespace SqlLiteTest.Model 
{ 
    public class qvdb 
    { 
     [PrimaryKey, AutoIncrement] 
     public int qvdbRecord { get; set; } 

     [MaxLength(3000)] 
     public string qvdbNotes { get; set; } 

     [MaxLength(1000)] 
     public string qvdb001 { get; set; } 

     [MaxLength(1000)] 
     public string qvdb002 { get; set; } 

    } 
} 

감사 CL. 클래스를 추가했지만 액세스하는 방법을 여전히 모릅니다. 좀 더 코드가 ...

// this works 
    // read record count 
    var allRecords = await db.QueryAsync<qvdb>("SELECT * FROM qvdb"); 
    var countRecords = allRecords.Any() ? allRecords.Count : 0; 
    this.textboxLog.Text = this.textboxLog.Text + Environment.NewLine + "There are " + countRecords + " records."; 

    // ?? 
    // read column names 
    var allColumns = await db.QueryAsync<qvdb>("PRAGMA table_info(qvdb)"); 
    foreach (var item in allColumns) { 
     //read name 
     this.textboxLog.Text = this.textboxLog.Text + Environment.NewLine + "columbn names"; 
    } 

답변

0

오,이 코드는 열 이름을 읽습니다.

// read column names 
      var query = await db.QueryAsync<table_info_record>("PRAGMA table_info(MY_TABLE_NAME_HERE)"); 

      foreach (var item in query) 
      { 
       Debug.WriteLine(string.Format("{0}", item.name) + " is a column."); 
      } 
5

레코드는 다음과 같이 PRAGMA table_info 모양에 의해 반환 :

public class table_info_record 
{ 
    public int cid  { get; set; } 
    public string name  { get; set; } 
    public string type  { get; set; } 
    public int notnull { get; set; } 
    public string dflt_value { get; set; } 
    public int pk   { get; set; } 
} 

이처럼 사용 : CL의 조언에 루프를 종료

db.QueryAsync<table_info_record>("PRAGMA table_info(...)"); 
+0

감사합니다 ... 후속 질문이 있습니다 ... – Gary95054

+0

Wonderful. 건배. – Gary95054