ADO.NET支持两种访问数据的模型:无连接模型和连接模型
无连接模型:将数据下载到客户机器上,并在客户机上将数据封装到内存中,然后可以像访问本地关系数据库一样访问内存中的数据(例如DataSet)。
连接模型:依赖于逐记录的访问,这种访问要求打开并保持与数据源的连接。
Connection对象:负责与数据的连接
Command对象:执行SQL语句,有三个常用方法:ExecuteNonQuery、ExecuteReader、ExecuteScalar
ExecuteNonQuery:用于增删改,返回受影响的行数
ExecuteReader:执行查询,返回一个SqlDataReader对象
ExecuteScalar:执行查询,并返回查询所返回首行首列
SqlDataReader对象:将查询数据直接送到目标位置,不经过任何的中转,执行速度快。
查询实例:
private void btnTest_Click(object sender, EventArgs e)
{
try
{
string serverName = "192.168.0.171";
string dataBaseName = "MyDB";
string id = "sa";
string pwd = "123456";
//string str = "server = " + serverName + ";" + "database = " + dataBase + ";" + "uid = " + id + ";" + "pwd = " + pwd;
string str = string.Format("server = {0};database = {1};uid = {2};pwd = {3}", serverName, dataBaseName, id, pwd);
using (SqlConnection con = new SqlConnection(str))
{
//拼接sql语句
string sql = "";
//准备执行sql语句的对象
using (SqlCommand cmd = new SqlCommand(sql, con))
{
if (con.State == System.Data.ConnectionState.Closed)
{
con.Open();//打开数据库
//以下若不使用using可以通过下句代码实现cmd和con的自动释放
//cmd.ExecuteNonQuery(System.Data.CommandBehavior.CloseConnection)
using (SqlDataReader reader = cmd.ExecuteReader())//准备读数据
{
//判断是否有数据(有没有行)
if (reader.HasRows)
{
//读取每一行
while (reader.Read())
{
}
}
}
}
}
}
}
catch (Exception)
{
MessageBox.Show("数据库操作失败!!!");
}
}
插入/更新/删除实例:仅sql语句不同,其它格式一样
private void btnTest_Click(object sender, EventArgs e)
{
try
{
string serverName = "192.168.0.171";
string dataBaseName = "MyDB";
string id = "sa";
string pwd = "123456";
//string str = "server = " + serverName + ";" + "database = " + dataBase + ";" + "uid = " + id + ";" + "pwd = " + pwd;
string str = string.Format("server = {0};database = {1};uid = {2};pwd = {3}", serverName, dataBaseName, id, pwd);
using (SqlConnection con = new SqlConnection(str))
{
//拼接sql语句
string sql = string.Format("insert into DeskInfo(name,num,desc) values('{0}','{1}','{2}')", txtName.Text, txtNum.Text, txtDesc.Text);
//准备执行sql语句的对象
using (SqlCommand cmd = new SqlCommand(sql, con))
{
if (con.State== System.Data.ConnectionState.Closed)
{
con.Open();//打开数据库
if (cmd.ExecuteNonQuery())
{
MessageBox.Show("插入数据库失败");
}
}
}
}
}
catch (Exception)
{
MessageBox.Show("数据库操作失败!!!");
}
}
临时数据库DataSet
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace _04临时数据库DataSet
{
class Program
{
static void Main(string[] args)
{
//创建数据库
DataSet ds = new DataSet("mydatabase");
//创建表
DataTable dt = new DataTable("student");
//创建列
DataColumn dc1 = new DataColumn("stuId", typeof(int));//第一个列
DataColumn dc2 = new DataColumn("stuName", typeof(string));//第二列
//把列添加到表中
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
//添加数据
dt.Rows.Add(1, "nll");
dt.Rows.Add(2,"ml");
ds.Tables.Add(dt);//把表放到数据库中
foreach (DataTable table in ds.Tables)
{
foreach (DataRow row in table.Rows)
{
Console.WriteLine("{0},=========={1}",row[0],row[1]);
}
}
Console.ReadKey();
}
}
}