一、简介
1、ado.net是一门数据库访问技术。
他可以通过程序来操作数据库
2、类库
Connection 类
和数据库交互,必须连接它。连接帮助指明数据库服务器、数据库名字、用户名、密码,和连接数据库所需要的其它参数。Connection对象会被Command对象使用,这样就能够知道是在哪个数据源上面执行命令。
与数据库交互的过程意味着必须指明想要执行的操作。这是依靠Command对象执行的。开发人员使用Command对象来发送SQL语句给数据库。Command对象使用Connection对象来指出与哪个数据源进行连接。开发人员能够单独使用Command对象来直接执行命令,或者将一个Command对象的引用传递给DataAdapter,它保存了一组能够操作下面描述的一组数据的命令。
Command对象
成功与数据建立连接后,就可以用Command对象来执行查询、修改、插入、删除等命令;Command对象常用的方法有ExecuteReader()方法、ExecuteScalar()方法和ExecuteNonQuery()方法;插入数据可用ExecuteNonQuery()方法来执行插入命令。
DataReader类
许多数据操作要求开发人员只是读取一串数据。DataReader对象允许开发人员获得从Command对象的SELECT语句得到的结果。考虑性能的因素,从DataReader返回的数据都是快速的且只是“向前”的数据流。这意味着开发人员只能按照一定的顺序从数据流中取出数据。这对于速度来说是有好处的,但是如果开发人员需要操作数据,更好的办法是使用DataSet。
DataSet对象
DataSet对象是数据在内存中的表示形式。它包括多个DataTable对象,而DataTable包含列和行,就象一个普通的数据库中的表。开发人员甚至能够定义表之间的关系来创建主从关系(parent-child relationships)。DataSet是在特定的场景下使用――帮助管理内存中的数据并支持对数据的断开操作的。DataSet是被所有Data Providers使用的对象,因此它并不像Data Provider一样需要特别的前缀。
DataAdapter类
某些时候开发人员使用的数据主要是只读的,并且开发人员很少需要将其改变至底层的数据源。同样一些情况要求在内存中缓存数据,以此来减少并不改变的数据被数据库调用的次数。DataAdapter通过断开模型来帮助开发人员方便的完成对以上情况的处理。当在一单批次的对数据库的读写操作的持续的改变返回至数据库的时候,DataAdapter 填充(fill)DataSet对象。DataAadapter包含对连接对象以及当对数据库进行读取或者写入的时候自动的打开或者关闭连接的引用。另外,DataAdapter包含对数据的SELECT、INSERT、UPDATE和DELETE操作的Command对象引用。开发人员将为DataSet中的每一个Table都定义DataAadapter,它将为开发人员照顾所有与数据库的连接。所以开发人员将做的工作是告诉DataAdapter什么时候装载或者写入到数据库。
DataTable类
DataTable 是一个数据网格控件。它可以被应用在 VB 和 ASP 上。它无须代码就可以简单的绑定数据库。它具有微软风格的用户界面。
DataTable的实例化以及添加列:
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
DataRow dr = dt.NewRow();
object[] objs = { 1, "Name" };
dr.ItemArray = objs;
dt.Rows.Add(dr);
this.dataGridView1.DataSource = dt;
二、建立与数据库的连接
1、格式
先引用命名空间using System.Data.SqlClient;
//连接字符串。服务器:本地;数据库:Data0216;用户:sa;密码:123
string sql = "server=.;database=Data0216;user=sa;pwd=123;";
//数据库连接类
SqlConnection conn = new SqlConnection(sql);
//数据库操作类
SqlCommand cmd = conn.CreateCommand();
//编写Tsql语句
cmd.CommandText = "insert into Users values('tianqi','1234','田七','1','2003-2-1','N003')";
//打开数据库
conn.Open();
//执行操作
cmd.ExecuteNonQuery();
//关闭数据库
conn.Close();
三、完整的数据查询,打印出来。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
namespace ConsoleApplication1
{ class Program
{
static void Main(string[] args)
{
//连接字符串。服务器:本地;数据库:Data0216;用户:sa;密码:123
string sql = "server=.;database=Data0216;user=sa;pwd=123;";
//数据库连接类
SqlConnection conn = new SqlConnection(sql);
//数据库操作类
SqlCommand cmd = conn.CreateCommand();
//编写Tsql语句
cmd.CommandText = "select *from Users";
//打开数据库
conn.Open();
//执行操作用SqlDataReader类dr接收一下
SqlDataReader dr = cmd.ExecuteReader(); int count = 0;
//判断查询结果是否有行(是否有数据)
if (dr.HasRows)
{
//dr.Read();读取下一行数据,如果有返还true,如果没有返回false。用一个死循环来打印数据,如果读取不到下一行的数据则循环结束。
while (dr.Read())
{
count++;
//将读取到该行数据的Ids列提取出来放到字符串ids中
string ids = dr["Ids"].ToString();
string username = dr["UserName"].ToString();
string password = dr["PassWord"].ToString();
string nickname = dr["NickName"].ToString();
string sex = dr["Sex"].ToString();
string birthday = dr["Birthday"].ToString();
string nation = dr["Nation"].ToString();
Console.WriteLine(ids + " | " + username + " | " + password + " | " + nickname + " | " + sex + " | " + birthday + " | " + nation);
}
}
Console.WriteLine("一共有" + count + "行数据"); //关闭数据库 conn.Close();
Console.ReadLine();
}
}
}
四、完整的数据删除,将数据删除成功与否返回给用户
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
string sql = "server=.;database=Data0216;user=sa;pwd=123;";
SqlConnection conn = new SqlConnection(sql);
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "delete from Users where UserName='zhangsan';";
conn.Open();
//执行操作,将受影响行数返回一个int类型接受一下
int a = cmd.ExecuteNonQuery();
//如果受影响行数大于0,则删除成功,否则删除失败
if (a > 0) Console.WriteLine("删除成功,本次共删除" + a + "行");
else Console.WriteLine("删除失败,本次未删除任何数据!");
conn.Close();
Console.ReadLine();
}
}
}
五、完整的数据修改,先查询数据库中有没有用户要修改的数据。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{ bool has = false;
string sql = "server=.;database=Data0216;user=sa;pwd=123;";
SqlConnection conn = new SqlConnection(sql);
SqlCommand cmd = conn.CreateCommand();
Console.Write("请输入要修改的用户名:"); string name = Console.ReadLine();
//先查询一下数据库中是否有用户要修改的这条数据
cmd.CommandText = "select * from users where username='"+name+"'";
conn.Open();
SqlDataReader dr = cmd.ExecuteReader(); //如果数据库中有用户要修改的这条数据,给has一个true值
if (dr.HasRows)
{
has = true;
}
conn.Close(); //如果数据库中有用户要删除的这条数据,再提示用户要修改的内容
if (has == true)
{
Console.WriteLine("已查到此用户");
Console.Write("请输入修改后的密码:"); string password = Console.ReadLine();
Console.Write("请输入修改后的昵称:"); string nickname = Console.ReadLine();
Console.Write("请输入修改后的性别:"); string sex = Console.ReadLine();
Console.Write("请输入修改后的生日:"); string birthday = Console.ReadLine();
Console.Write("请输入修改后的民族:"); string nation = Console.ReadLine();
//修改数据的sql语句
cmd.CommandText = "update Users set PassWord='"+password+"',NickName='"+nickname+"',Sex='"+sex+"',Birthday='"+birthday+"',Nation='"+nation+"' where UserName='"+name+"'";
//再次打开数据库
conn.Open();
//用aaa记一下受影响行数
int aaa= cmd.ExecuteNonQuery();
//关闭数据库
conn.Close();
if (aaa > 0) Console.WriteLine("修改成功");
else Console.WriteLine("修改失败");
}
//如果查询不到用户要修改的数据,提示用户无法修改。
else
Console.WriteLine("未查到此用户,无法修改");
Console.ReadLine();
}
}
}
六、完整的数据添加
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
string name = "";
string password = "";
string nickname = "";
string sex = "";
string birthday = "";
string nationcode = "";
string sql = "server=.;database=Data0216;user=sa;pwd=123;";
SqlConnection conn = new SqlConnection(sql);
SqlCommand cmd = conn.CreateCommand(); //判断用户名是否被占用且不能为空,如果未被占用且不为空将用户输入的用户名放在name中,跳出循环
while (true)
{
Console.Write("请输入用户名:");
name = Console.ReadLine();
cmd.CommandText = "select *from Users where UserName='" + name + "'";
conn.Open();
SqlDataReader dr = cmd.ExecuteReader(); if (!dr.Read() && name.Length != 0)
{
conn.Close();
break;
}
}
//判断密码是否大于6位
while (true)
{
Console.Write("请输入密码:");
password = Console.ReadLine(); if (password.Length >= 6)
{
break;
}
}
//判断昵称是否为空
while (true)
{
Console.Write("请输入昵称:");
nickname = Console.ReadLine(); if (nickname.Length > 0)
{
break;
}
}
//判断性别输入,输入男将1记录到数据库中,输入女将0记录到数据库中
while (true)
{
Console.Write("请输入性别(男/女):");
sex = Console.ReadLine();
if (sex == "男" || sex == "女")
{
if (sex == "男")
sex = "1";
else sex = "0"; break;
}
else
Console.WriteLine("输入的格式不正确,请重新输入");
}
//判断输入的生日格式是否正确
while (true)
{
Console.Write("请输入生日:");
birthday = Console.ReadLine(); try
{
Convert.ToDateTime(birthday); break;
} catch
{
Console.WriteLine("输入的格式不正确,请重新输入");
}
}
//判断输入的民族在该数据库中是否有此记录
while (true)
{
Console.Write("请输入民族:"); string nation = Console.ReadLine();
//从民族表中查询用户输入的民族对应的民族编号
cmd.CommandText = "select NationCode from UserNation where NationName='" + nation + "'";
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
//如果查询到该记录,则把民族编号提取出来,关闭数据库并跳出循环
if (dr.Read())
{
nationcode = dr["NationCode"].ToString();
conn.Close();
break;
}
//如果查询不到该记录,提示一下用户,关闭数据库,继续循环。
else
{
conn.Close();
Console.WriteLine("记录暂无此民族,请输入其他民族");
}
}
//添加数据的sql语句
cmd.CommandText = "insert into Users values('" + name + "','" + password + "','" + nickname + "','" + sex + "','" + birthday + "','" + nationcode + "')";
conn.Open();
int a = cmd.ExecuteNonQuery();
if (a == 1) Console.WriteLine("数据已经添加进去");
else Console.WriteLine("该条数据未添加进去!");
conn.Close();
Console.ReadLine();
}
}
}