2014-01-20 127 views
0

我不知道如何將SQLite表中的列名存儲到字符串列表中。 下面的代碼填充與列名一個DataGridView(除其他事項外):SQLite - 將表名的列名存儲在字符串列表中

string sDatabasePath = DBPath(); 
SQLiteConnectionStringBuilder datasource = new SQLiteConnectionStringBuilder(); 
datasource.Add("Data Source", sDatabasePath); 
datasource.Add("Version", "3"); 
datasource.Add("New", "False"); 
datasource.Add("Compress", "True");    
using (SQLiteConnection connection = new SQLiteConnection(datasource.ConnectionString)) 
{ 
    connection.Open(); //opens connection 
    SQLiteCommand getColumnNames = new SQLiteCommand("PRAGMA table_info('myTable');", connection); 
    SQLiteDataAdapter myAdapter = new SQLiteDataAdapter(getColumnNames); 
    DataSet myDataSet = new DataSet(); 
    //myAdapter.Fill(myDataSet, "name"); 
    this.dataGridView1.DataSource = myDataSet; 
    this.dataGridView1.DataMember = "name"; 
    connection.Close(); 
} 
+0

的表名通常在數據網格添加? –

+0

在datagrid中,我正確地獲取了列名(datagrid中的第一列稱爲name,每行都是我表中列的名稱,datagrid中的第二列稱爲cid,第三類,第四個not_null等)。 –

回答

1

如果您想查詢綁定到一個列表,而不是一個DataGridView,那麼你應該使用一個數據讀者和不是數據set eg

using (SQLiteConnection connection = new SQLiteConnection(datasource.ConnectionString)) 
using (SQLiteCommand cmd = new SQLiteCommand("PRAGMA table_info('myTable');")) 
{ 
    connection.Open(); //opens connection 
    var tableNames = new List<string>(); 
    using (SQLiteDataReader reader = cmd.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
      tableNames.Add(reader.GetString(0)); // read 'name' column 
     } 
    } 
    return tableNames; 
} 
+0

謝謝詹姆斯。你對使用數據閱讀器是正確的。我嘗試過使用它,但我不知道語法。我剛開始使用C#。有一個小的變化,我不得不做的 - tableNames.Add(Convert.ToString(reader [「name」])) –

+0

@Nick_F啊是啊忘了它返回'對象',而不是字符串,或者你可以調用'reader.GetString( 0)'其中'0'是列號或'reader [「name」]。ToString()'但是後者意味着如果'name'爲'null'則失敗。 – James

1
  DataTable dtb = new DataTable(); 
      myAdapter.Fill(dtb); 

      string[] names = new string[dtb.Rows.Count]; 
      for (int i = 0; i < dtb.Rows.Count; i++) 
      { 
       DataRow row = dtb.Rows[i]; 
       names[i] = row[0].ToString(); 
      } 
+0

謝謝迪特里希的幫助。我採用了James提出的解決方案,因爲他首先發布了它,併爲我工作。 –

+0

沒問題^ - ^我們在這裏嘗試幫助。 –

+0

@DietrichPrg你可以用更少的代碼來做到這一點,var names = dtb.Rows.Select(x => x.Item [「name」]);'。我去了'SQLiteDataReader',因爲我在OP的假設下不需要'DataSet'。但是,如果OP已經使用'DataSet',這將是更有效的選擇。 – James

相關問題