2009-08-08 31 views
5

Sau đây là quy trình được lưu trữ của tôi.Cách nhận dữ liệu theo kết quả của thủ tục đã lưu

ALTER PROCEDURE SP_GetModels 
(
    @CategoryID bigint 
) 
AS 
BEGIN 
    Select ModelID,ModelName From Model where [email protected] 
END 

và tôi đang gọi thủ tục lưu trữ trong mã đằng sau như

public SqlConnection conn; 
public SqlDataReader GetModels() 
     { 


     DataTable dt = new DataTable(); 
    public void DbConnection() 
      { 
       conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SampleCs"].ConnectionString); 
       conn.Open(); 
      } 
       DbConnection(); 
       SqlCommand cmd = new SqlCommand("SP_GetModels", conn); 
       cmd.CommandType = CommandType.StoredProcedure; 
       cmd.Parameters.Add("@CategoryID", SqlDbType.BigInt, 10).Value = CategoryID; 
       // SqlDataAdapter madap = new SqlDataAdapter(cmd, conn); 
       SqlDataReader dreader= cmd.ExecuteReader(); 

       //madap.Fill(dt); 
       return dreader; 
      } 

Tôi có một DropDownList mà tôi có để ràng buộc đối tượng DataReader có chứa modelname. làm thế nào tôi có thể thiết lập nguồn dữ liệu để DropDownList như datareader

Trả lời

2

Bạn sẽ có thể trực tiếp ràng buộc SqlDataReader để danh sách thả xuống như thế này:

MyDropDownList.DataSource = GetModels(); 
MyDropDownList.DataTextField = "ModelName"; 
MyDropDownList.DataValueField = "ModelID"; 

Bạn cũng cần phải xác định các thành viên (tài sản) đang diễn ra sẽ được hiển thị (DataTextField), và cái nào sẽ được sử dụng làm giá trị khi một mục được chọn trong danh sách thả xuống (DataValueField).

tôi sẽ khuyên bạn lấy dữ liệu từ SqlDataReader trong thủ tục GetModels() của bạn, tạo ra thể hiện của một lớp Model mà sẽ giữ những lĩnh vực bạn có và nhu cầu, đóng SqlDataReader, và sau đó trở về nó như là một List<Model> và liên kết danh sách đó với danh sách thả xuống. MUCH tốt hơn so với trực tiếp ràng buộc một SqlDataReader!

public class Model 
{ 
    public int ModelID { get; set; } 
    public string ModelName { get; set; } 
} 

Và trong GetModels của bạn():

public List<Model> GetModels() 
{ 
    List<Model> result = new List<Model>(); 

    using(SqlConnection conn = new SqlConnection(ConfigurationManager. 
            ConnectionStrings["SampleCs"].ConnectionString)) 
    { 
    using(SqlCommand cmd = new SqlCommand("SP_GetModels", conn)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.Add("@CategoryID", SqlDbType.BigInt, 10).Value = CategoryID; 

     conn.Open(); 

     using(SqlDataReader dreader = cmd.ExecuteReader()) 
     { 
      while(dreader.Read()) 
      { 
       Model workItem = new Model() 
           { ModelID = dreader.GetInt(0), 
            ModelName = dreader.GetString(1) }; 
       result.Add(workItem); 
      } 
      reader.Close(); 
     } 

     conn.Close(); 
    } 
    } 
    return result; 
} 

Marc

1

Trước tiên, hãy chắc chắn rằng bạn có datareader tự động đóng khi trở về nó:

SqlDataReader dreader= cmd.ExecuteReader(CommandBehavior.CloseConnection); 

Sau đó, để ràng buộc vào danh sách:

DropDownList1.DataSource = GetModels(); 
DropDownList1.DataValueField = "ModelID"; 
DropDownList1.DataTextField = "ModelName"; 
DropDownList1.DataBind(); 
1

Tôi không nghĩ rằng SqlDataReader kế thừa từ IListSource và nếu tôi nhớ chính xác, bạn chỉ có thể sử dụng các lớp kế thừa từ IListSource để gắn kết dữ liệu. Nếu bạn muốn nhận được một DataTable, bạn nên sử dụng một SqlDataAdapter để thực hiện lệnh thay thế. Mở rộng trên giải pháp của Marc:

public void BindData() 
{ 
    dropDownList1.DataSource = LoadModelData(); 
    dropDownList1.DataValueField = "ModelID"; 
    dropDownList1.DataTextField = "ModelName"; 
    dropDownList1.DataBind(); 
} 
public DataTable LoadModelData() 
{ 
    DataSet dataset = new DataSet(); 
    using (conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SampleCs"].ConnectionString)) 
    { 
     SqlCommand cmd = new SqlCommand("SP_GetModels", conn); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.Add("@CategoryID", SqlDbType.BigInt, 10).Value = CategoryID; 
     SqlDataAdapter adapter = new SqlDataAdapter(cmd, conn); 
     adapter.Fill(dataset); 
    } 
    return dataset.Tables[0]; 
} 
0

thế nào về vấn đề này một

SqlDataReader dr = cmd.ExecuteReader(); 
      while (dr.Read()) 
      { 
       DropDownList1.Items.Add(new ListItem(dr["ModelName"].ToString(), dr["ModelID"].ToString())); 

      } 
      con.Close(); 
10
private void PopDataBaseName() 
{ 
    try 
    { 
     SqlCommand cmd = new SqlCommand("sp_generate_report", con); 
     cmd.Parameters.Add("@TABLE_NAME", SqlDbType.VarChar,100).Value = TextBox1.Text; 
     cmd.CommandType = CommandType.StoredProcedure; 
     SqlDataAdapter adp = new SqlDataAdapter(cmd); 
     DataSet ds = new DataSet(); 
     adp.Fill(ds); 

    } 
    catch (Exception ex) 
    { 

    } 
} 
+0

gì về việc có sản lượng param từ t sql bên cạnh DataTable? làm thế nào để có được param đầu ra quá? Có thể không? Mẫu vật? –

Các vấn đề liên quan