2017-07-25 25 views
0

我想創建一個具有SQL連接和功能的類(如插入,選擇,刪除查詢),並且我想將它稱爲我的表單(按鈕等)如何使用SQL連接和查詢功能創建一個類並將其調用到我的Windows窗體按鈕?

我不知道是否有可能或者不是,或者有這樣做的一些方法,所以...

我已經做了一些研究,並提出了類SQL連接上的代碼,我不知道它是否正確。

非常感謝您提前。我是一名初學者,想了解更多關於c#的知識。

任何類型的答覆表示讚賞。謝謝

對不起,我英文不好

using System.Data.SqlClient; 

    class SqlConnClass 
{ 
    public static SqlConnection GetConnection() 
    { 
     string str = "Data Source=localhost;Initial Catalog=kwem;Integrated Security=True;"; 

     SqlConnection conn = new SqlConnection(str); 
     conn.Open(); 
     return conn; 
    } 
+0

嘗試使用嚮導設置對象「SQL DATA SOURCE」 –

+0

對不起Emanuel Pirovano,但我可以在哪裏找到嚮導設置? – vicserna1997

+0

把你的項目窗口中的對象,並點擊「配置...」,它會問你一些關於你的數據庫鏈接的信息,你想要什麼命令 –

回答

0

你是接近!您可能希望將`conn.Open()'從您的方法中取出,因爲您可以爲查詢打開它。 (請記住關閉它或將其放入使用聲明中!)

public static void UpdateDB(string valToUpdate) 
{ 
    SQLConnection conn = GetConnection(); 
    using (conn) 
    { 
    SQLCommand updateCommand = new SQLCommand(GetConnection(), "Update Table 
    Set Val = @newValue"); 
    updateCommand.Parameters.AddWithValue("@newValue", valToUpdate); 
    conn.Open(); 
    updateCommand.ExecuteNonQuery(); 
    } 
} 

然後,您將對任何其他類型的DB函數執行相同操作。

+0

非常感謝Ryan Carlisle的回答。那麼我怎樣才能將這個類用於我的按鈕? – vicserna1997

0

這是真的,但;如果你的字符串str不起作用。請試試這個:

string str = "Data Source=local host ;Initial Catalog=kwem;Integrated Security=True" 

你還需要定義sql表,然後選擇你的數據庫。

+0

謝謝BatuhanGünebakmaz。 – vicserna1997

0

你走在正確的道路上。
你指的是數據訪問層,簡稱DAL。
它是n-tier architecture model的一部分(在簡單版本中有3層 - 顯示,業務邏輯和數據訪問層)。

其基本概念是將演示文稿,邏輯和數據分爲應用程序的3個不同部分。
至於數據訪問層,通常你會有一個靜態或單例類負責連接業務層和數據。這個類將包含CRUD操作的方法 - 創建,讀取,更新和刪除數據。您需要爲每個操作和每個數據實體創建方法。

一種方法我看到所有的時間是這樣的:

public static class DAL 
{ 
    private static string _ConnectionString = null; 
    static DAL() // A static constructor to initialize the connection string 
    { 
     _ConnectionString = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString; 
    } 
    public static DataSet GetCategories() 
    { 
     var ds = new DataSet(); 
     var sql = "SELECT * FROM Categories"; 
     using (var con = new SqlConnection(_ConnectionString)) 
     { 
      using (var cmd = new SqlCommand(sql, con)) 
      { 
       using (var adapter = new SqlDataAdapter(cmd)) 
       { 
        adapter.Fill(ds); 
       } 
      } 
     } 
     return ds; 
    } 

    public static int DeleteCategory(int categoryId) 
    { 
     int rowsEffected = 0; 
     var sql = "DELETE FROM Categories WHERE Id = @Id"; 
     using (var con = new SqlConnection(_ConnectionString)) 
     { 
      using (var cmd = new SqlCommand(sql, con)) 
      { 
       cmd.Parameters.Add("@Id", SqlDbType.Int).Value = categoryId; 
       con.Open(); 
       cmd.ExecuteNonQuery(); 
      } 
     } 
     return rowsEffected; 
    } 
} 

等。正如你所看到的,有很多重複的代碼。
這意味着更長的代碼,牧民的維護,並且如果出於某種原因您希望支持其他類型的數據庫(如遷移到MySql,Oracle或其他),您將必須非常努力地改變所有供應商特定的類DAL(SqlConnection,SqlCommand等)。

這些問題正是我寫ADONETHelper的原因。我已經使用了它幾年(主要是以更早,不同形式),現在我覺得它已經足夠成熟,可以上市了。它目前在MIT的許可下,意味着它是完全免費的,您可以下載您的副本並根據您的需要進行更改。
你應該選擇使用它,你的DAL類或許應該是這樣的:

public static class DAL 
{ 
    private static IDBHelper _DB; 
    static DAL() // A static constructor to initialize _DB 
    { 
     // initialize connection string from config file 
     var connectionstring = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString; 
     _DB = DBHelperFactory.GetInstance(DataBaseType.SQLServer, connectionstring); 
    } 

    public static DataSet GetCategories() 
    { 
     var sql = "SELECT * FROM Categories"; 
     return _DB.FillDataSet(sql, CommandType.Text); 
    } 

    public static int DeleteCategory(int categoryId) 
    { 
     var sql = "DELETE FROM Categories WHERE Id = @Id"; 
     var param = _DB.CreateParameter("@Id", ADONETType.Int, categoryId); 
     return _DB.ExecuteNonQuery(sql, CommandType.Text, param); 
    } 
} 

正如你看到的,代碼重複下降到最低限度,並遷移到不同的數據庫是不斷變化的那麼簡單靜態構造函數使用不同的DataBaseType。當然,如果你使用的是供應商特定的SQL,你也必須改變它。

相關問題