如何使用MySqlDataReader从DB检索值?

时间:2012-02-16 22:58:05

标签: c# mysql .net

通过使用此代码,我想从数据库中检索表中的一些行:

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();
}

1 个答案:

答案 0 :(得分:2)

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

其中As ...辅助函数可能就像

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

在无处不在的静态帮助程序类中使用所有帮助程序方法是非常好的,除非你在一个类中完成所有这些操作。

注意DBNull,它不是空的。 :(

如果它们不是DBNull,则为byte []的Blob。还没有完成它,但MySql的一些有趣的类型,如日期和时间可能会导致皱眉,并且枚举似乎是一个我似乎记得的字符串。我记得的是,前一段时间的调查是否将MySQl作为我们产品之一的后端,作为sql server的替代品。

您还可以使用索引

访问结果列

e.g。 myReader [0]。

Ther是类的方法加载,GetValues基于当前行返回一个对象数组。

这也可能派上用场了

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());   
}