1.断开式连接到数据库
using System.Data.SqlClient;
using System.Data;
//断开式连接
//步骤1:创建连接数据库的对象
SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=你的密码;database=bankdb");
//步骤2:打开(连接)数据库 conn.Open();
string sql = @"select * from Account
select * from AccountRecord";
SqlCommand command = new SqlCommand(sql,conn);//创建执行脚本的对象
//步骤3:创建数据适配器==>根据数据库查询出对应的结构
SqlDataAdapter adapter = new SqlDataAdapter(command);
//步骤4:在托管堆分配内存空间
DataTable dt = new DataTable();//临时表
adapter.Fill(dt);//填充
DataSet ds = new DataSet();//数据集
adapter.Fill(ds);
//给表起名字
ds.Tables[0].TableName = "Account";
ds.Tables[1].TableName = "AccountRecord";
//取其中的Account表
DataTable dt_Account = ds.Tables["Account"];
DataTable dt_AccountRecord = ds.Tables[1];
【查看临时表dt】
【查看数据集ds】
【查看临时表ds_Account】
【查看临时表ds_AccountRecord】
【注1】DataSet 库>DataTable 表>DataRow 行>Column 列
【注2】有装箱拆箱
dt_Account.Rows[0]["CardId"]=10008;//装箱
dt_Account.Rows[0]["Pwd"]=123453;//修改密码
//也可以写成:dt_Account.Rows[0][1]=123453;
int cardId = (int)dt_Account.Rows[0]["CardId"];//拆箱
2.以断开式连接的方式对临时表进行增删改查
namespace AdoNet_05
{
class Program
{
static void Main(string[] args)
{
datatable dt_account = getdatatable();
//1:修改密码
dt_account.rows[0]["pwd"] = 155584;
//也可以写成:dt_account.rows[0][1] = 155584;
//2:添加一条信息
datarow drow1 = dt_account.newrow();
//这里的属性字段不区分大小写
drow1["cardid"] = 10006;
drow1["pwd"] = "789456";
drow1["name"] = "mary";
drow1["usermoney"] = 200000;
drow1["telephone"] = "11455784265";
//添加到临时表
//方式一:(默认追加到最后)
//dt_account.rows.add(dr1);
//方式二:
dt_account.rows.insertat(drow1, 0);
//3:删除
//方式一:通过对象删除
//dt_account.rows.remove(drow1);
//方式二:通过下标删除
dt_account.rows.removeat(0);
Console.ReadLine();
}
/// <summary>
/// 返回一张临时表
/// </summary>
/// <returns></returns>
private static DataTable GetDataTable()
{
//断开式连接
//步骤1:创建连接数据库的对象
SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=你的密码;database=bankdb");
//步骤2:打开(连接)数据库 conn.Open();
string sql = @"select * from Account";
SqlCommand command = new SqlCommand(sql, conn);//创建执行脚本的对象
//步骤3:创建数据适配器==>根据数据库查询出对应的结构
SqlDataAdapter adapter = new SqlDataAdapter(command);
//步骤4:在托管堆分配内存空间
DataTable dt = new DataTable();//临时表
adapter.Fill(dt);//填充
return dt;
}
/// <summary>
/// 获取数据集
/// </summary>
private static void GetDataSet()
{
SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=你的密码;database=bankdb");
string sql = @"select * from Account
select * from AccountRecord";
SqlCommand command = new SqlCommand(sql, conn);
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataSet ds = new DataSet();//数据集
adapter.Fill(ds);
//给表起名字
ds.Tables[0].TableName = "Account";
ds.Tables[1].TableName = "AccountRecord";
//取其中的Account表
DataTable dt_Account = ds.Tables["Account"];
DataTable dt_AccountRecord = ds.Tables[1];
}
}
}
【增加一行数据后的结果】
3.将修改后的临时表与数据库同步数据
【在临时表中显示:存款大于1000的信息】
static void Main(string[] args)
{
DataTable dt_Account2 = GetDataTableByWhere();
Console.ReadLine();
}
/// <summary>
/// 获取指定内容的临时表
/// </summary>
/// <returns></returns>
private static DataTable GetDataTableByWhere(ref SqlDataAdapter adapter)
{
SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=你的密码;database=bankdb");
int money = 1000;
//创建执行脚本的对象
string sql = @"select * from Account where usermoney > @money";
SqlCommand command = new SqlCommand(sql, conn);
//将参数化的数据库自定义字段加入到command对象
command.Parameters.Add(new SqlParameter("@money", money));
//创建适配器,将command对象放入适配器
adapter = new SqlDataAdapter(command);
DataTable dt = new DataTable();
adapter.Fill(dt);
return dt;
}
【临时表dt_Account2】
【修改数据,同步到数据库】
方式一:
static void Main(string[] args)
{
DataTable dt_Account2 = GetDataTableByWhere();
Console.ReadLine();
}
/// <summary>
/// 获取指定内容的临时表
/// </summary>
/// <returns></returns>
private static DataTable GetDataTableByWhere()
{
SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=你的密码;database=bankdb");
int money = 1000;
//创建执行脚本的对象
string sql = @"select * from Account";
SqlCommand command = new SqlCommand(sql, conn);
//创建适配器,将command对象放入适配器
SqlDataAdapter adapter = new SqlDataAdapter(command);
//创建适配器授权对象(用于做添加、删除、修改),将适配器对象放入,即授权
SqlCommandBuilder scb = new SqlCommandBuilder(adapter);
DataTable dt = new DataTable();
adapter.Fill(dt);
//修改表中的数据
dt.Rows[0]["pwd"] = "7777777";
dt.Rows[0]["name"] = "sherry";
adapter.Update(dt);
return dt;
}
方式二:使用引用传参 ref
static void Main(string[] args)
{
//方式一:
//ref引用传参,使用前必须赋值
SqlDataAdapter adapter = null;
DataTable dt_Account2 = GetDataTableByWhere(ref adapter);
dt_Account2.Rows[0]["pwd"] = 111111;
dt_Account2.Rows[0]["name"] = "lzl";
//dt_Account2.Rows.RemoveAt(4);//只清除临时表(即内存)中的数据,数据库中并未删除(适配器无法识别)
dt_Account2.DefaultView.Delete(4);
//方式二:
//或者写成out:
//SqlDataAdapter adapter1;
//DataTable dt_Account3 = GetDataTableByWhere(out adapter1);
//将修改好的临时表同步到数据库中
adapter.Update(dt_Account2);
Console.ReadLine();
}
/// <summary>
/// 获取指定内容的临时表
/// </summary>
/// <returns></returns>
private static DataTable GetDataTableByWhere(ref SqlDataAdapter adapter)
{
SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=你的密码;database=bankdb");
int money = 1000;
//创建执行脚本的对象
string sql = @"select * from Account";
SqlCommand command = new SqlCommand(sql, conn);
//创建适配器,将command对象放入适配器
adapter = new SqlDataAdapter(command);
//创建适配器授权对象(用于做添加、删除、修改),将适配器对象放入,即授权
SqlCommandBuilder scb = new SqlCommandBuilder(adapter);
DataTable dt = new DataTable();
adapter.Fill(dt);
return dt;
}
/// <summary>
/// 返回一张临时表
/// </summary>
/// <returns></returns>
private static DataTable GetDataTable()
{
SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=你的密码;database=bankdb");
//步骤2:打开(连接)数据库 conn.Open();
string sql = @"select * from Account";
SqlCommand command = new SqlCommand(sql, conn);//创建执行脚本的对象
//步骤3:创建数据适配器==>根据数据库查询出对应的结构
SqlDataAdapter adapter = new SqlDataAdapter(command);
//步骤4:在托管堆分配内存空间
DataTable dt = new DataTable();//临时表
adapter.Fill(dt);//填充
return dt;
}
①临时表
②数据库