前面一篇文章,我们介绍了如何在c#中对数据库进行更新操作。主要是利用SqlCommand 对象的ExecuteNonQuery方法。
这篇文章介绍,如何进行查询操作。本文给出的例子仍然是针对sql server数据库的。对于其它数据库(源),区别只是引入的部门api的不同,但流程和方法是一样的。
一、查询单个值
SqlCommand 对象提供了一个ExecuteScalar方法,它的作用是返回查询结果中第一条记录中的第一列的值。如果查询结果没有记录,则返回的值为null。
该方法往往用于检查数据是否存在。
我们还是看例子:
using System; using System.Data; using System.Data.SqlClient; using System.Windows.Forms; namespace DbExample { class DbActor { public void querySingleValue() { SqlConnection conn = getConnection(); try { conn.Open(); SqlCommand command = new SqlCommand("select count(*) from userinfo", conn); int value = (int)command.ExecuteScalar(); MessageBox.Show(value.ToString()); } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { conn.Close(); } } private SqlConnection getConnection() { string strConnection = @"Data Source = localhostSQLEXPRESS; Initial Catalog = mydb; User Id = sa; Password = Xqh980234;"; SqlConnection conn = new SqlConnection(strConnection); return conn; } } }
二、遍历所有记录
在大部分场景下,我们需要获取查询结果的所有数据。这个需要用到c#的DataReader对象。我们看一个例子:
public void query() { SqlConnection conn = getConnection(); SqlDataReader reader = null; try { conn.Open(); SqlCommand command = new SqlCommand("select * from userinfo", conn); reader = command.ExecuteReader(); while (reader.Read()) { string result = reader.GetString(0) + "," + reader.GetString(1); MessageBox.Show(result); } } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { if (reader!=null) reader.Close(); conn.Close(); } }
对于查询操作,基本上就是上面标准的格式,需要注意的地方是:
1)获取字段是,序号是从0开始的(0代表第一个字段)。有的开发语言的api(如java)是从1开始的。
2)最后的SqlDataReader对象不要忘了关闭。不要要放到try语句的最后,要放到finally语句中,防止放在try最后但处理过程中出现异常而无法被调用。
3)如果主需要取一条记录,把while改成if语句即可。
本篇文章介绍了,如何在c#中进行数据库查询操作,结合上篇文章对更新操作的介绍,基本上可以满足大部分场景的开发。当然只是介绍最基本的使用方法和流程。还有一些细节的API需要自己去了解。在下面的文章中,我们将继续介绍如何使用DataSet对象来访问数据库。