2012-09-14 54 views
2

我是半新的C#,但特別是C#中使用SQLite,目前我來講一個SQLite數據庫設置精細的它好我運行Windows應用程序連接表單應用程序,並且我已經將數據庫中的表綁定到datagrid視圖。C#/ SQLite的簡單方法來存儲查詢結果作爲變量

這是一切優秀我有一個功能的配置運行在那裏我通過SQL語句作爲字符串的函數查詢和運行時,它作爲查詢。

我是隨便我怎麼做,我得到的結果,從我知道obviosuly它不會停像

private string QueryResult(string query){ 
    connect 
    run query 
    read query 
    return result 
} 

所有個例子我已經看到了使用SQLReader的查詢回來,但我似乎無法得到它工作中,我真的習慣了使用PHP和SQL,這似乎不是用它在C#中有人可以解釋或指出這麼簡單得多的地方我也許能找到一個tutuorial或函數,你可以通過它在任意查詢一個字符串並得到結果很簡單嗎?我所需要的結果不會是數組或巨大的東西,我只希望一次返回1個字符串或數字,所以我不需要任何複雜的東西。

請幫我我花了大約4個小時閱讀這個東西昨晚似乎沒有取得任何進展。

+0

您是否使用一個DataContext?還是ADO.NET?您的數據是否在DataTable中? – Derek

回答

7

試試這個,也許它會幫助你:

public string QueryResult(string query) 
{ 
    string result = ""; 
    SQLiteConnection sqlite = new SQLiteConnection("Data Source=/path/to/file.db"); 
    try 
    { 
     sqlite.Open(); //Initiate connection to the db 
     SQLiteCommand cmd = sqlite.CreateCommand(); 
     cmd.CommandText = query; //set the passed query 
     result = cmd.ExecuteScalar().ToString(); 
    } 
    finally 
    { 
     sqlite.Close(); 
    } 
    return result; 
} 
+1

當我回家時,我也會嘗試這個,看起來像最簡單的一個,如果它工作的話可能會最終使用這個,直到實現更優雅的東西。 – Sam

+0

是的,有很多可能性s –

+1

哇...這是非常複製和粘貼,它的工作,我試圖讓它工作,德里克顯示,但我認爲我缺乏理解,把它從它不斷返回一個對象。無論如何,我現在會使用它,因爲它的工作原理我希望得到Derek的方法,因爲它看起來更有趣,但非常感謝。 – Sam

0

通常情況下,我做這樣的事情:

string CONNECTION_STRING = "Persist Security Info=False; Integrated Security = SSPI; Initial Catalog=DATABASENAME;Data Source=SERVERIP"; 

string query = "IF OBJECT_ID('TABLE_NAME') IS NOT NULL SELECT * FROM TABLE_NAME"; 

using (SqlConnection Connection = new SqlConnection(CONNECTION_STRING)) 
{ 
    using (SqlCommand sqlCommand = new SqlCommand(query, ConnectionString)) 
    { 
     try 
     { 
      Connection.Open(); 
      SqlDataReader queryCommandReader = sqlCommand.ExecuteReader(); 
      DataTable dataTable = new DataTable(); 
      dataTable.Load(queryCommandReader); 

      if (dataTable != null) 
      { 
       if (dataTable.Rows != null) 
       { 
        if (dataTable.Rows.Count > 0) 
        { 
         String rowText = ""; 
         rowText += dataTable.Rows[ROW_NUM] [COLUMN_NAME];       
        } 
       } 
      } 
     } 
     catch (Exception) 
     { 
      ... 
     } 
     finally 
     { 
       ... 
     } 
2

繼承人,我已經使用的方法....

第一關,建立一個類來表示你的數據庫中的表: -

public class Contact 
    { 
     public int ContactID { get; set; } 
     public string Surname { get; set; } 
     public string Forename { get; set; } 
     public string MobileNumber { get; set; } 
     public string EmailAddress { get; set; } 
     public string Information { get; set; } 
    } 

然後我這個數據加載到一個IEnumerable列表: -

public List<Contact> GetContacts() 
     { 
      DataTable dt = new DataTable(); 

      OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Contacts]", Connection); 
      Adapter.SelectCommand = cmd; 

      Connection.Open(); 
      Adapter.SelectCommand.ExecuteNonQuery(); 
      Adapter.Fill(dt); 
      Connection.Close(); 

      var Contacts = (from row in dt.AsEnumerable() 

          select new Contact 
          { 
           ContactID = row.Field<int>("ContactID"), 
           Surname = row.Field<string>("Surname"), 
           Forename = row.Field<string>("Forename"), 
           MobileNumber = row.Field<string>("MobileNumber"), 
           EmailAddress = row.Field<string>("EmailAddress"), 
           Information = row.Field<string>("Information") 

          }).ToList(); 



      return Contacts; 
     } 

在我的應用程序創建該對象的實例: -

public List<Contact> contactData; 
    contactData = dc.GetContacts(); 

我現在要操作使用LINQ的數據功率: -

var Query = ConactData.Where(item=> item.ContactID == 10) 
      .Select(item=> item.Surname).toString(); 

您可以使用LINQ查詢您的數據,並存儲爲列表,絃樂等等等等

希望這有助於。

+1

非常感謝,我曾考慮過爲此做一個類,但是我沒有經驗做這件事,當我第一次嘗試它時,它與XML稍有不同,但這看起來完全像我需要的那種東西,我會在今晚測試它。我感到非常感謝! – Sam

+1

我自己很新,使用LINQ雖然很棒,你會很快接受它。 – Derek

+0

是的,這看起來比我原先想的更優雅的解決方案,所以學習這可能會更好,而不僅僅是簡單地使用它。我今晚會給它一個測試卡在工作中:) – Sam

1

//在正常的邏輯

SELECT (SELECT SUM(column_name) FROM table_name WHERE condition) - (SELECT SUM(column_name) FROM table_name WHERE condition) 

//實際編碼例

public void total_due() 
       { 
        string query = "select (select sum(amount) from table_name where id>0 and amount>paid and [order no] like '" + textbox1.Text + "%' and [name] like '" + textbox2.Text + "%' and [date] like '" + textbox3.Text + "%') - (select sum(paid) from table_name where id>0 and amount>paid and [order no] like '" + textbox1.Text + "%' and [name] like '" + textbox2.Text + "%' and [date] like '" + textbox3.Text + "%')"; 
        SqlConnection con = new SqlConnection("server=server_name;Database=database_name;UID=sa;Password=password;"); 
        con.Open(); 
        SqlCommand cmd = new SqlCommand(query,con); 
        due.Text = cmd.ExecuteScalar().ToString(); 
        con.Close(); 
       } 
+0

感謝您發佈此示例。 – Sam

+0

你可以使用String.Format來簡化生活 –

相關問題