ExecuteNonQuery方法、ExecuteScalar方法、ExecuteReader方法的区别
----ExecuteNonQuery():执行命令对象的SQL语句,返回一个int类型变量,如果SQL语句是对数据库的记录进行操作(如记录的增加、删除和更新),那么方法将返回操作所影响的记录条数。
----ExecuteScalar():执行命令对象的SQL语句,如果SQL语句是SELECT查询,则仅仅返回查询结果集中的第1行第1列,而忽略其他的行 和列。该方法所返回的结果为object类型,在使用之前必须强制转换为所需的类型。如果SQL语句不是SELECT查询,则返回结果没有任何作用。
----ExecuteReader():执行命令对象的SQL语句,在ADO.NET中,就是DataReader对象的ExecuteReader()方法来进行数据的列出,并且我们用这个ExecuteReader()方法来显示数据是最快的一种方法,因为当我们在用ExecuteReader()方法中的DataReader 对象来进行数据的在网站建设中显示时,他只可以一条一条向前读,不能返回,也就是像ASP中的ADO方法中的Recordset 对象的Movenext一样,它没有move -1这样的返回方法。
读取方式一:executereader方式读取数据,具有时效性,只读,具有较高的读取效率
//说明:程序代码中data source 表示运行数据库对应的计算机名,initial catalog表示所使用的数据库名。uid为指定的数据库用户名,pwd为指定的用户口令。
//sa登录方式,data source表示服务器地址,initial catalog表示数据库名字,user id表示账号名,pwd表示账号密码。
string constr = "data source=.;initial catalog=QPMES_DEV;user id=sa;pwd=sa";
//创建新的SQL链接
SqlConnection con = new SqlConnection(constr);
//创建SQL语句
string sql = "select * from Test_LEO_PC";
//创建数据库命令
SqlCommand com = new SqlCommand(sql, con);
try
{
//打开数据库
con.Open();
//executereader的方式读取数据库数据,这种方式读取数据快
SqlDataReader myReader;
//执行数据库数据
myReader = com.ExecuteReader();
//逐行读取数据
while (myReader.Read())
{
Console.WriteLine("名字是{0},年龄是{1},地址是{2}", myReader.GetString(0), myReader.GetInt32(1), myReader.GetString(2));
//resultData.Add(new DataLink() { Name = myReader.GetString(0), Age = myReader.GetInt32(1), Address = myReader.GetString(2) });
}
}
catch (Exception)
{
throw;
}
finally
{
con.Close();
}
读取方式二:通过dataset设置数据库,其中DataSet会创建一个本地数据表,SqlDataAdapter用来操作本地数据库,并与服务器数据库进行交互,当建立本地数据表并调用Fill()函数填充数据表后,可以关闭与数据库服务器的连接,当操作完成后,再建立连接把本地数据库更新到服务器中。
SqlDataAdapter有两个有用的方法,分别为 fill 和 update。下面分别来介绍这两方法。
-
fill 方法
fill 方法是用来填充 DataSet 的。也就是,把数据库中的运送到C#空间。fill 有13个重载的方法,在使用时可以根据情况选择使用。使用 FillSchema,让 SqlDataAdapter 创建DataSet 的架构,并在用数据填充它之前就将主键信息包括进去。 -
update 方法
update 方法是用来更改数据库的。也就是,把C#内存中修改的内容同步到数据库中。更新是逐行进行的。对于插入、修改和删除,Update 方法会自动确定类型(Insert、Update 或 Delete)。
static void Main(string[] args)
{
//说明:程序代码中data source 表示运行数据库对应的计算机名,initial catalog表示所使用的数据库名。uid为指定的数据库用户名,pwd为指定的用户口令。
string constr = "data source=.;initial catalog=QPMES_DEV;user id=sa;pwd=sa";
SqlConnection con = new SqlConnection(constr);
string sql = "select * from Test_LEO_PC";
SqlCommand com = new SqlCommand(sql, con);
try
{
con.Open();
//创建SqlDataAdapter对象
SqlDataAdapter da = new SqlDataAdapter();
//设置命令语句
da.SelectCommand = com;
//设置数据库
DataSet ds = new DataSet();
//创建一张名称为“try”的表,并通过fill方法把所有数据导入表中。
da.Fill(ds, "try");
//读取数据的方式,通过遍历的方式,遍历行DataRow和列DataColumn。
foreach(DataRow mDr in ds.Tables[0].Rows)
{
Console.WriteLine("{0},{1},{2}", mDr[0], mDr[1], mDr[2]);
}
}
catch (Exception)
{
throw;
}
finally
{
con.Close();
}
}
dataset的update功能demo
conn = new SqlConnection(connStr);
//打开数据库连接
conn.Open();
string sql = "select * from userinfo";
//创建SqlDataAdapter类的对象
SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
//创建DataSet类的对象
DataSet ds = new DataSet();
//使用SQLDataAdapter对象sda将查询结果填充到DataTable对象ds中
sda.Fill(ds);
//创建SqlCommandBuilder类的对象
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(sda);
//创建DataRow类的对象
DataRow dr = ds.Tables[0].NewRow();
//设置name列的值
dr["name"] = textBox1.Text;
//设置password列的值
dr["password"] = textBox2.Text;
//向DataTable对象中添加一行
ds.Tables[0].Rows.Add(dr);
//更新数据库
sda.Update(ds);
补充关键点:
1、声明sqldataadapter的几种方法
https://blog.csdn.net/gatieme/article/details/20695853
2、遍历dataset表的几种方法
https://www.cnblogs.com/hailexuexi/p/5323967.html
3、数据库的基本概念和面试题
https://www.cnblogs.com/wenxiaofei/p/9853682.html