需要引用 MySql.Data.dll;
String connetStr = "server=127.0.0.1;port=3306;user=root;password=root; database=minecraftdb;";
MySqlConnection conn = new MySqlConnection(connetStr);
conn.Open();//打开连接
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader reader = cmd.ExecuteReader();//执行ExecuteReader()返回一个MySqlDataReader对象
while (reader.Read())//初始索引是-1,执行读取下一行数据,返回值是bool
{
//读取需要的列
Console.WriteLine(reader.GetInt32("index") + reader.GetString("Comany"));//"Comany"是数据库对应的列名,推荐这种方式
}
conn.Close();//关闭连接
//先根据列名Comany找到列索引;即reader.GetOrdinal("Comany");
//根据列索引判断该列是否为空!reader.IsDBNull(reader.GetOrdinal("Comany"))
if (!reader.IsDBNull(reader.GetOrdinal("Comany")))
vRegister.Comany = reader.GetString("Comany");
//as运算符与空合并运算符(??)运算符用于默认值
vRegister.Comany = reader["Comany"] as string;
vRegister.index = reader["index"] as int? ?? default(int);
vRegister.index = (reader["index"] as int?).GetValueOrDefault();
vRegister.Birthday = reader["Birthday"] as DateTime? ?? default;
使用SqlDataReader注意的几点:
1、当SqlDataReader没有关闭之前,数据库连接会一直保持open状态,所以在使用SqlDataReader时,使用完毕应该马上调用SqlDataReader.Close()关闭它。
2、一个连接只能被一个SqlDataReader使用,这也是为什么要尽早关闭SqlDataReader的原因。
3、使用完SqlDataReader后,你可以在程序中显示的调用数据库连接对象的Close方法关闭连接,也可以在调用Command对象的ExecuteReader方法时传递CommandBehavior.CloseConnection 这个枚举变量,这样在调用SqlDataReader的Close方法时会自动关闭数据库连接。
4、使用SqlDataReader时尽量使用和数据库字段类型匹配的方法来取得相应的值,比如对于整形的字段使用GetInt32,对字符类型的字段使用GetString。这样会减少因为类型不一致而额外增加的类型转换操作。
5、使用SqlDataReader获取多条记录时,如果没有访问到取出记录的末尾时想要关闭SqlDataReader,应该先调用Command对象的Cancel方法,然后再调用SqlDataReader的Close方法。Command对象的Cancel方法使得数据库不再把SqlDataReader中未访问的数据发送到调用端,如果不调用此方法直接关闭SqlDataReader,数据库会发送和SqlDataReader未访问数据等长的空数据流到调用端。
6、如果想通过SqlCommand的ExecuteReader方法获取存储过程的返回值或者输出参数,必须先调用SqlDataReader的Close方法后,才能获取输出参数的值或者返回值。
7、如果使用SqlDataReader只返回一条记录,那么在调用Command的ExecuteReader方法时,指定
CommandBehavior.SingleRow参数,这个参数的是否使用对SQL Server .NET Data Provider没有什么影响,但是当你使用OLE DB .NET Data Provider时,指定这个参数后,DataPrivider内部将使用IRow接口,而不是使用相对来说耗费资源的IRowSet接口。