2014-04-30 5 views
1

이것은 DataReader를 통해 SQL에서 데이터를 읽는 데 사용하는 코드입니다. 그것은 테이블에 NULL이있을 때 Error를 제공합니다. 어떻게 처리할까요? Dataareader에서 NULL 처리

나는 이것에 문제가 널 (NULL) 처리에 성공하지만 결과는 SQL 데이터베이스가 해당 필드에 값 1이있는 경우에도 항상 0이다

c.ActualWeight= dr[0] as float? ?? default(float); 

을 시도했다.

{ 
    List<Inventory_Connector> LC = new List<Inventory_Connector>(); 
    string ConString = "data source=DELL\\SQLSERVER1;Initial Catalog=Camo;Integrated Security=True"; 
    SqlConnection con = new SqlConnection(ConString); 
    SqlCommand cmd = new SqlCommand("Select Top 17 * from Inventory_Connector", con); 
    con.Open(); 
    SqlDataReader dr = cmd.ExecuteReader(); 

    while (dr.Read()) 
    { 
     c.ActualWeight = float.Parse(dr[0].ToString().Trim()); 
    } 

    LC.Add(c); 
} 

dr.Close(); 
con.Close(); 
return LC; 
+0

어떤 종류를 시도 할 수는'Inventory_Connector'의 첫 번째 열이있다? –

+0

그냥 코멘트, 상위 17 행을 선택하고 각 행의 값을 c.ActualWeight에 넣고 목록에'c '를 추가하고 다시 초기화하십시오. 즉, 실제 체중은 DB에서 마지막으로 입력 한 것입니다. – DaveShaw

+1

또한'con','cmd'와'dr'에'Dispose' 메서드를 호출하는 것을 잊지 마십시오. 또는 더 나은 방법은'using '문을 사용하는 것입니다. – Crono

답변

4

SqlDataReader.IsDBNull을 사용하여 데이터 판독기에서 Null 값을 확인할 수 있습니다. C# nullDBNull은 다릅니다.

c.ActualWeight = 
    dr.IsDBNull(0) 
    ? default(float) 
    : float.Parse(dr[0].ToString().Trim()); 
1
c.ActualWeight = (dr[0] != DBNull.Value) ? float.Parse(dr[0].ToString().Trim()) 
             : default(float) 

는 NULL 값을 검사 할 DBNull.Value를 사용한다.

2

당신이

if (dr.IsDBNull(0)) 
    c.ActualWeight = default(float); 
else 
    c.ActualWeight = float.Parse(dr[0].ToString().Trim()); 
+0

GetOrdinal이 필요하지 않습니다. IsDBNull의 서수 위치는 – DaveShaw

+0

입니다. @DaveShaw 있습니까? 나는 그것을 아주 드물게 사용한다. 나는 그것을 되돌려 놓을 필요가 있다고 생각한다. 나는 내 대답을 고칠 것이다. 고마워! – cost