2015-02-04 4 views
4

methods of the SqlDataReader을 사용하면 read.GetValue(0)을 전달하면 첫 번째 열의 값과 같은 서수를 전달하거나 두 번째 열 내가 read.GetValue(1)에 합격하면.SqlDataReader 열 이름으로 값 가져 오기 (서수가 ​​아닌)

메서드를 살펴보면 ColumnID와 같이 열의 이름을 전달하여 열의 값을 가져 오는 옵션이 표시되지 않습니다. 나의 신화적인 예에서, 나는 read.GetValueofColumn("ColumnID")을 전달하고 (은 방법 목록에서 말할 수있는 한 GetValueofColumn 방법이 존재하지 않는다는 것을주의해야한다.

이 작업을 수행하는 방법이 없거나이를 수행하는 방법이 없습니까?

+0

시도를 "read.GetValue ["의 ColumnName "]" –

+0

나는 그것을 시도하고 불행하게도'GetValue'은 단지'int'을 받아들입니다. – user9927

+0

'dataReader [ "ColumnName"]'이 찾고있는 값을 얻지 않는 이유는 무엇입니까? 여기에 아주 좋지 않은 것이 있습니다. [C# 열 이름으로 DataReader 값 가져 오기] (http://www.java2s.com/Code/CSharp/Database-ADO.net/ReferencedatainSqlDataReaderbycolumnname.htm) – MethodMan

답변

12

당신은, 그래서 당신의 전화가 될 수있는 GetOrdinal 방법을 사용하여 컬럼의 순서를 얻을 수 있습니다 :

read.GetValue(read.GetOrdinal("ColumnID")); 
+0

아름답게 작동합니다, 감사합니다. (* 8 분 안에 대답을 수락 할 수 있습니까?) – user9927

+1

성능상의 이유로 Microsoft는 GetOrdinal을 읽기 루프 외부에서 호출하고 루프 내에서 GetValue (int)를 호출하는 것이 좋습니다. –

11

Datareader 숫자 (기반 위치) 방법, 및 텍스트 (기반의 필드 이름)를 가지고있다. 그래서, 필드 이름, 당신은

object value = reader["some field name"]; 

+0

훨씬 좋습니다. ..lol – MethodMan

+0

참이지만 판독기에 대한 다른 도우미 함수는 int를 사용하기 때문에이를 사용하려면 GetOrdinal (색인 루프를 벗어나는 것이 좋음)을 호출하여 색인을 가져와야합니다. 읽기 루프 내부의 함수 (reader [index] 포함)의 수를 나타냅니다. –

+0

질문은 '열의 이름을 전달하여 열 값을 가져 오는 옵션'이며, 내 대답이 가장 간단하다고 생각합니다. –

2

늦은 대답 (readerdatareader이라고 가정)과 같은 값을 얻을 수 있습니다,하지만 ... 이것은 항상 나를 위해 일했고, 나는 생각 가까이는 무엇 OP 것은 달성하기 위해 노력하기 :

using (SqlCommand cmd = new SqlCommand(cmdString, cn)) 
using (SqlDataReader rs = cmd.ExecuteReader()) { 

    if (rs.HasRows) { 

     while (rs.Read()) { 

      Meeting_DiscussionItems_MX di = new Meeting_DiscussionItems_MX(); 

      di._Discussion_Item_MX_ID = (int) rs["Discussion_Item_MX_ID"]; 
      di._Meeting_ID    = (int) rs["Meeting_ID"]; 
      di._Discussion_Item_Name = (string) rs["Discussion_Item_Name"]; 
      di._Display_Order   = (string) rs["Display_Order"]; 
      di._Status     = (string) rs["Status"]; 
      di._Discussion_Items  = (string) rs["Discussion_Items"]; 
      di._ETOPS_Items    = (string) rs["ETOPS_Items"]; 
      di._Followup    = (string) rs["Followup"]; 
      di._Pinned     = (string) rs["Pinned"]; 
      di._Active     = (string) rs["Active"]; 

      _Meeting_DiscussionItems_MX.Add(di); 
     } 

    } 
}