2016-07-28 42 views
0

我得到我想用下面的代碼的結果。 但我的問題是我做對了嗎? 請張貼一些修改,如果需要修改 我在C#中的新嘗試學習如何從UI層的數據傳送到數據層填充下拉列表,並使用CheckBoxList的用戶界面層和數據層的最佳實踐asp.net C#

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 

     <asp:DropDownList ID="ddList" runat="server"></asp:DropDownList> 

     <asp:CheckBoxList ID="cbList" runat="server"></asp:CheckBoxList> 

    </div> 
    </form> 
</body> 
</html> 

using System.Data.SqlClient; 
using System.Data; 


namespace test2 
{ 
    public class Data 
    { 
     string connection = "Data Source=Test\\SQLEXPRESS; Initial Catalog = RegistrationDB;Integrated Security=SSPI"; 

     SqlConnection conn = new SqlConnection(); 

     public Data() 
     { 

      conn.ConnectionString = connection; 

     } 


     public SqlConnection getConnection() 
     { 

      return conn; 

     } 

     public DataTable LoadCountry() 
     { 

      DataTable dtable = new DataTable(); 

      string select = "SELECT ID,country FROM dbo.Country"; 

      using (SqlConnection conn = new SqlConnection(connection)) 
      { 

       SqlDataAdapter adapter = new SqlDataAdapter(select, conn); 

       adapter.Fill(dtable); 

       return dtable; 

      } 

     } 


     public DataTable LoadChkboxList() 
     { 

      DataTable position = new DataTable(); 

      using (SqlConnection conn = new SqlConnection(connection)) 
      { 

       string select = "SELECT ID,chkPosition FROM dbo.checkPosition"; 

       SqlDataAdapter adapter = new SqlDataAdapter(select, conn); 

       adapter.Fill(position); 

       return position; 

      } 


     } 
    } 
} 




using System; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 

namespace test2 
{ 
    public partial class UI : System.Web.UI.Page 
    { 
     Data datalayer = new Data(); 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!this.IsPostBack) 
      { 

       ddList.DataSource = datalayer.LoadCountry(); 
       ddList.DataTextField = "country"; 
       ddList.DataValueField = "ID";    
       ddList.DataBind(); 

       cbList.DataSource = datalayer.LoadChkboxList(); 
       cbList.DataTextField = "chkPosition"; 
       cbList.DataValueField = "ID"; 
       cbList.DataBind(); 

      } 

     } 
    } 
} 

回答

0

有點修改我的代碼

public DataTable getData(string query) 
{ 
    DataTable dtable = new DataTable(); 
    using (SqlConnection con = new SqlConnection(YourConnectionString)){ 
     using (SqlCommand cmd = new SqlCommand(query,con){ 
       SqlDataAdapter adapter = new SqlDataAdapter(cmd); 
       return adapter.Fill(dt); 
     } 
    } 
} 

注意:你可以把上面的函數中的一類,並呼籲在您需要。也可以修改爲接受參數。爲了避免SQL注入,void inline查詢,使用存儲過程(最好)。

DataTable dt Country = getData(YourQuery); 

看:Parameterized Query and Stored Procedures

+0

非常感謝你的答覆。非常感謝。這是否真的是必要的,或者是一種很好的做法,將查詢作爲我的方法中的參數?因爲如果我將它傳遞給UI層,我還需要添加查詢參數。謝謝 –

+0

如果您使用ADO.Net執行數據庫操作(如您所做的那樣),建議讓一個類調用數據庫操作。存儲過程優先於查詢。不要忘記接受我的答覆作爲答案,如果它幫助你:) – Sami

+0

你的答案幫助我很多。謝啦。這是我在stackoverflow我的第一篇文章,所以我敢打賭,如果我標記任何回答我的問題將被關閉?是的,我會考慮包括存儲過程,以避免SQL注入。但在讓urs作爲答案之前,讓我先查找其他評論。感謝,並有很好的一天,godbless :) –