2011-09-01 42 views
1

回到我動態選擇一個表,從選擇和有不上所有的表都存在一個字段。在我的閱讀器中,如何檢查該字段是否存在於集合中?確定一個字段從DataReader

我用這一點,但它僅確定它是否爲空...不是它是否存在與否:

if (myReader.GetValue(myReader.GetOrdinal("PrePay")) != DBNull.Value) 
    myModel.PrePay = myReader.GetBoolean(myReader.GetOrdinal("PrePay")); 
+1

的[在一個SqlDataReader對象檢查列名]可能重複(http://stackoverflow.com/questions/373230/check-for-column-name-in-a-sqldatareader-object)。似乎是這個問題的最大答案 –

回答

0
while(reader.Read()) 
{ 
    if(reader.GetOrdinal("FieldName")>=0) //field exists 
    { 
.... 
    } 
} 
+0

如果字段名不存在,那麼你會得到一個'IndexOutOfRangeException',這大概是什麼OP是在逃避。 – LukeH

+0

你說得對,@LukeH我認爲這將返回-1,但閱讀本:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getordinal.aspx我意識到,這實際上會拋出一個異常。 Christoper Johnson:不理我的回答,我不知道我在說什麼。 – Icarus

0
for (int i = 0; i < myReader.FieldCount; i++) 
{ 
    string name = myReader.GetName(i); 
    if (string.Equals(name , "PrePay", StringComparison.OrdinalIgnoreCase)) 
    { 
     object value = myReader.GetValue(i); 
     if (!Convert.IsDBNull(value)) 
     { 
      myModel.PrePay = (bool)value; 
     } 
     break; 
    } 
} 

如果你的讀者返回多行,那麼你應該在一開始只執行一次查找,然後緩存通過ResultSet迭代時使用的序號。

0
While(myReader.Read()) 
{ 
    MessageBox.Show(myReader.Item("PrePay").toString()); 
} 

基本上,如果「PrePay」的值爲null,則不存在,否則就不存在。