如何使用MySqlDataReader从数据库中检索值

本文关键字:检索 数据库 何使用 MySqlDataReader | 更新日期: 2023-09-27 18:25:04

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

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

如何使用MySqlDataReader从数据库中检索值

类似的东西

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

As…are的帮助函数可能与类似

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

etc

通常情况下,除非您在一个类中完成所有这些工作,否则在泛在静态助手类中遍历所有助手方法是很常见的。

注意DBNull,它不是null。:(

如果不是DBNull,则为byte[]的Blob。我也没有做过,但MySql的一些有趣类型,如日期和时间,可能会引起眉头紧锁,枚举看起来像一根绳子,我似乎记得。我记得的是不久前的一次调查,是否将MySQl作为我们产品的后端,作为sql server的替代方案。

您还可以使用索引访问结果的列

例如myReader[0]。

类上有很多方法,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());   
}