2009-08-08 2 views
5

다음은 저장 프로 시저입니다.저장 프로 시저의 결과로 datatable을 얻는 방법

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

그리고 난은 내가 modelname에를 포함 DataReader 개체를 결합해야 할 내가 DropDownList로이

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; 
      } 

로 뒤에 코드에서 저장 프로 시저를 호출하고 있습니다. 또한 어떤 멤버 (속성)를 지정해야합니다

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

것입니다 : 어떻게하여 DataReader로

답변

2

당신이 직접이 같은 드롭 다운 목록에 SqlDataReader 개체를 결합 할 수 있어야한다는 드롭 다운리스트에 데이터 소스를 설정할 수 있습니다 표시 할 항목 (DataTextField) 및 항목이 드롭 다운 목록 (DataValueField)에서 선택 될 때 값으로 사용됩니다.

내가 강하게 당신이 SqlDataReader 개체를 닫고, 그 당신은 필드와 필요성을 보유 할 Model 클래스의 인스턴스를 생성, 당신의 GetModels() 절차에 SqlDataReader 개체의 데이터를 잡아, 다음 List<Model>과로 돌아 추천 해당 목록을 드롭 다운 목록에 바인딩하십시오. SqlDataReader를 직접 바인딩하는 것보다 훨씬 낫습니다!

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

그리고 당신의 GetModels()에서

: 그것을 반환 할 때

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; 
} 

마크

1

첫째, 당신은 자동으로 종료 DataReader를가 있는지 확인 :

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

을 다음 바인딩에 목록에 :

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

SqlDataReader가 IListSource에서 상속 받았다고 생각하지 않습니다. 올바르게 기억한다면 데이터 바인딩을 위해 IListSource에서 상속받은 클래스 만 사용할 수 있습니다. DataTable을 가져 오려면 대신 SqlDataAdapter를 사용하여 명령을 실행해야합니다. 마크의 솔루션을 확장 :

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

방법 데이터 테이블 옆 t의 SQL에서 출력 PARAM을 가진 약

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

무엇 하나 이것에 대해? 출력 매개 변수도 얻는 방법? 가능한가? 견본? –