2012-12-28 3 views
0

objectdatasource를 사용하여 SQL Server에 충돌하고 내 세부 정보보기 컨트롤을 채우기 위해 datatable을 반환하려고합니다. 선택된 ID 값은 gridview 컨트롤에 의해 반환됩니다. datatable가 어댑터로 채워지지 않은 것처럼 보입니다. 왜 그럴 수 없었는지 알 수 없습니다. sql의 ID가 기본 키 (Int, 4, null이 아님)로 설정됩니다. 디버거는 Detail 데이터 테이블이 null이라고 말합니다. 어떤 도움이라도 대단히 감사합니다.ASP.NET의 Detailsview

public DataTable GetDetail(string ID) 
     { 
      if (ID == "") 
      { 
       return null; 
      } 
      else 
      { 

       DataTable Detail = null; 
       using (SqlConnection conn = new SqlConnection(connection)) 
       { 
        string comm = @"select * from dbo.Products where ID = @ID"; 
        conn.Open(); 
        SqlDataAdapter adapter=null; 
        using (SqlCommand cmd = new SqlCommand(comm, conn)) 
        { 
         cmd.Parameters.Add("ID", System.Data.SqlDbType.Int, 4).Value = Convert.ToInt32(ID); 
         adapter = new SqlDataAdapter(cmd); 
         adapter.Fill(Detail); 
         return Detail; 
        } 
       } 
      } 
+0

'adapter.Fill (dataset);'시도하고 데이터 세트 –

답변

0

감사를보십시오 CommandType을

cmd.CommandType = CommandType.Text; 
0

난 당신이 모든이

DataSet ds = new DataSet(); 
using (SqlConnection con = new SqlConnection(connection)) 
{ 
    string myquery="select * from dbo.Products where ID = @ID"; 
    SqlCommand cmd = new SqlCommand(myquery, con); 
    SqlDataAdapter dap = new SqlDataAdapter(); 
    dap.SelectCommand = cmd; 
    cmd.Parameters.Add("@ID", SqlDbType.NVarChar, 15).Value = ID; 
    dap.Fill(ds); 
    return ds.Tables[0]; 
    } 
+0

을 정의했습니다. adapter = new SqlDataAdapter (cmd), 그렇지 않습니까? – John

+0

죄송합니다. John이 (가) 도움이 될지 자신의 답변을 업데이트했습니다. – Adil

0

를 놓쳤다 생각합니다.

문제는 데이터 테이블을 새 인스턴스로 초기화하지 못했습니다.

DataTable 세부 정보 = null; ===> DataTable 정보 = 새로운 Datatable();

또한 convert는 코드가 아닌 sql에서 수행되어야합니다.

cmd.Parameters.Add ("ID", System.Data.SqlDbType.Int, 4) .Value = ID;

문자열 comm = @ "select * from dbo.Products where ID = convert (int, @ ID)";