2012-02-16 66 views
1

通過使用此代碼,我想從數據庫中檢索某些行從表中:如何使用MySqlDataReader從數據庫中檢索值?

ID int 
ParentID int? 
IsVisible bool 

MySqlCommand myCommand = new MySqlCommand(mySelectQuery, myConnection); 
myConnection.Open(); 
MySqlDataReader myReader = myCommand.ExecuteReader(); 

try 
{ 
    while(myReader.Read()) 
    { 
    //here I want to retrieve the all returned data 
    } 
} 
finally 
{ 
    myReader.Close(); 
    myConnection.Close(); 
} 

回答

2

喜歡的東西

while(myReader.Read()) 
{ 
ID = AsInteger(myReader["ID"]).Value; 
Parent = AsInteger(myReader["Parent"]); 
IsVisble = AsBoolean(myReader["IsVisible"]); 
} 

凡爲...是輔助功能可like like

private static int? AsInteger(Object argValue) 
{ 
    if ((argValue == null) || (argValue == DBNull.Value)) 
    { 
    return null; 
    } 
    return Convert.ToInt(argValue); 
} 

在無處不在的靜態幫助器類中除去所有的幫助器方法通常是goer,除非你在一個類中做所有這些。

注意DBNull,它不爲空。 :(

如果它們不是DBNull,它們是byte []的Blob也沒有做,但MySql的一些有趣的類型如Date和Time可能會導致一個皺眉,並且枚舉會出現一個字符串I好像記得,我記得是從調查前一段時間是否有MySQL作爲後端爲我們的產品之一作爲替代到SQL Server。

您也可以通過索引

訪問結果的列

eg myReader [0]。

Ther對類中的方法進行加載,GetValues返回對象ba的數組sed在當前行上。

這可能會派上用場,以及

if (myReader.Read()) 
{ 
    StringBuilder sb = new StringBuilder(myReader.FieldCount); 
    for(int i = 0; i<myReader.FieldCount; i++) 
    { 
     sb.AppendLine(myReader.GetName(i); 
    } 
    Console.Write(sb.ToString()); 
} 
+0

嗯,如果我試圖讓'myReader [「PARENTID」]'然後我得到一個異常'結果中找不到指定的列:即使ParentID'我想要從表中選擇*。當然這個專欄存在於該表中 – Tony 2012-02-16 23:14:00

+0

沒有辦法從這裏說,但是如果你不能這樣做,那麼有趣的事情就會發生。你也可以像myReader [0]那樣以數組的形式訪問結果,所以你可以做一個foreach並列出來看看是什麼。 – 2012-02-16 23:20:06

+0

如果我想運行循環'foreach(var item in myReader){}'它被調用4次(這是正確的),但編譯器不會進入該循環內部 – Tony 2012-02-16 23:25:57

相關問題