2015-05-21 71 views
4

我正在學習C#和SQL Server。我正在遵循一個簡單的教程,這導致我創建了一個DB連接類,用於連接和更新數據庫。然後我有一個簡單的C#表單,它使用一個按鈕和一個DataSet複製數據,在表格​​行中來回導航,然後在一些標籤上顯示信息。如何進行查詢以檢索特定數據

沒有問題'直到這裏,但我想,如果我想顯示一個特定行的單個值(列),說「給我顯示具有某個名字的人的姓氏」。

我熟悉的SQL查詢命令,所以我想是這樣的:

SELECT last_name FROM Employees WHERE first_name = 'Jason' 

跟隨我的代碼...

DBconnection.cs

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

namespace cemiGEST 
{ 
/// <summary> 
/// A class that makes the connection to the SQL Database 
/// </summary> 
class DBconnection 
{ 
    // variables 
    private string sql_string; 
    private string strCon; 
    System.Data.SqlClient.SqlDataAdapter da_1; 

    // set methods 
    public string Sql 
    { 
     set { sql_string = value; } 
    } 

    public string connection_string 
    { 
     set { strCon = value; } 
    } 

    // DataSet 
    public System.Data.DataSet GetConnection 
    { 
     get { return MyDataSet(); } 
    } 

    // MyDataSet method 
    private System.Data.DataSet MyDataSet() 
    { 
     System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(strCon); 
     con.Open(); 

     da_1 = new System.Data.SqlClient.SqlDataAdapter(sql_string, con); 

     System.Data.DataSet dat_set = new System.Data.DataSet(); 
     da_1.Fill(dat_set, "Table_Data_1"); 

     con.Close(); 

     return dat_set; 
    } 

    // Update DB method 
    public void UpdateDB(System.Data.DataSet ds) 
    { 
     System.Data.SqlClient.SqlCommandBuilder cb = new System.Data.SqlClient.SqlCommandBuilder(da_1); 
     cb.DataAdapter.Update(ds.Tables[0]); 
    } 
} 
} 

我正在通過遞增一個更新行號的變量來訪問這些值(當來回移動時)。以下是一些示例代碼。

public partial class Example : Form 
{ 

// variables 
DBconnection objConnect; 
string conStringAUTH; 
DataSet ds; 
DataRow dr; 
int maxRows; 
int inc = 0; 

    private void Login_Load(object sender, EventArgs e) 
    { 
     CloseBeforeLogin = true; 

     try 
     { 
      objConnect = new DBconnection(); 
      conStringAUTH = Properties.Settings.Default.authConnectionString; 

      objConnect.connection_string = conStringAUTH; 
      objConnect.Sql = Properties.Settings.Default.authSQL; 

      ds = objConnect.GetConnection; 

      maxRows = ds.Tables[0].Rows.Count; 

      if (maxRows == 0) 
      { 
       MessageBox.Show("No user found. Loading first run wizard."); 
       NewUser newUser = new NewUser(); 
       newUser.ShowDialog(); 
      } 

     } 
     catch (Exception err) 
     { 
      MessageBox.Show(err.Message); 
     } 
    } 
} 

我敢肯定,這是簡單的,但我沒有到達那裏。

編輯:

我寧願用我的課的DbConnection,沒有外部庫。我不在計劃中,因此目前無法測試任何東西,但是經過對此事的一整夜睡眠之後,以及在重新查看我的代碼之後,我可能找到了答案。請告訴我,如果你認爲這會做的伎倆:

在我的第二類(在這裏我連接並訪問DB),我已經使用SQL查詢,更具體位置:

objConnect.Sql = Properties.Settings.Default.authSQL; 

這個查詢(authSQL)由我創建並嵌入到設置中,在這裏我正在導入它。所以,如果我做了以下代替,你認爲這是可行的:

objConnect.Sql = "SELECT last_name FROM Employees WHERE first_name = 'Jason'"; 

的「Properties.Settings.Default.authSQL」代碼只不過是一個快捷方式更上一個字符串「SELECT * FROM AUTH」 - AUTH是我的桌子,爲簡單起見,我稱其爲員工。

所以,這將是這樣的:

public partial class Example : Form 
{ 

// variables 
DBconnection objConnect; 
string conStringAUTH; 
DataSet ds; 
DataRow dr; 
int maxRows; 
int inc = 0; 

    private void Login_Load(object sender, EventArgs e) 
    { 
     CloseBeforeLogin = true; 

     try 
     { 
      objConnect = new DBconnection(); 
      conStringAUTH = Properties.Settings.Default.authConnectionString; 

      objConnect.connection_string = conStringAUTH; 
      objConnect.Sql = "SELECT last_name FROM Employees WHERE first_name = 'Jason'"; 

      ds = objConnect.GetConnection; 

      // Data manipulation here 

     } 
     catch (Exception err) 
     { 
      MessageBox.Show(err.Message); 
     } 
    } 

回答

1

沒有必要在這裏的數據集。如果你知道你想要的SQL:使用它 - 也許有一些參數化。例如,使用 「短小精悍」,我們可以這樣做:

string firstName = "Jason"; 
var lastNames = con.Query<string>(
    "SELECT last_name FROM Employees WHERE first_name = @firstName", 
    new { firstName }).ToList(); 
+1

dapper.Net:https://github.com/ StackExchange/dapper-dot-net – Eric

+0

請檢查我對該問題的編輯。 – Aedahl

1

檢查這個....希望這也適用...

//String Declaration 
string Sqlstr = "select CountryCode,Description,Nationality from ca_countryMaster where isDeleted=0 and CountryCode = 'CAN' "; 

string DBCon = "Data Source=RAJA;Initial Catalog=CareHMS;Integrated Security=True;"; 

      SqlConnection SqlCon = new SqlConnection(DBCon); 
      SqlDataAdapter Sqlda; 
      DataSet ds = new DataSet(); 

      try 
      { 
       SqlCon.Open(); 
       Sqlda = new SqlDataAdapter(Sqlstr, SqlCon); 
       Sqlda.Fill(ds); 

       gdView.DataSource = ds.Tables[0]; 
       gdView.DataBind(); 
      } 
      catch (Exception ex) 
      { 
       lbl.text = ex.Message; 
      } 
      finally 
      { 
       ds.Dispose();     
       SqlCon.Close(); 
      } 
+0

請檢查我的編輯問題。 – Aedahl