数据访问
将数据库中的数据,提取到内存中,展示给用户看
还可以将内存中的数据写入数据库中去
并不是唯一的数据库访问技术,但是它是最底层的数据库访问技术
对应命名空间:System.Data.SqlClient;
SqlConnection:连接对象
SqlCommand:命令对象
SqlDataReader:读取器对象
CommandText:命令文本
增删改、查分以下几步:
1、造连接字符串
string connstring = "server=.;database=mydb;user=sa;pwd=123";
connstring:造的字符串名
server指服务器:一般是IP地址,本机可以使用点;
database指数据库名称:要访问的数据库名称
user数据库的用户名:一般是sa
pwd数据库的密码:自己设置的
2、造连接对象
SqlConnection conn = new SqlConnection(connstring);
conn:造的连接对象名
3、创建命令对象
SqlCommand cmd = conn.CreateCommand();
cmd:造的命令对象名
4、写要执行的SQL语句
4-1:查询
cmd.CommandText = "select * from Info";
4-2:添加
cmd.CommandText = "Insert into Info values('p032','毒哥','True','n001','1987-02-02')";
4-3:删除
cmd.CommandText = "delete from Info where Code='p032';
4-4:更改
cmd.CommandText = "update Info set name='情方方' where Code='p032';
5、打开连接
conn.Open(); //可放在执行之前的任意位置
6、执行操作
6-1:(读取操作,返回读取器对象)
SqlDataReader dr = cmd.ExecuteReader();
6-2.执行操作(增删改操作,返回行数)
cmd.ExecuteNonQuery();
7、处理数据
7-1:查询一条数据
if (dr.HasRows) //HasRows 判断是否有行数据 bool型,返回true/false
{
dr.Read(); //dr.Read() 是数据库数据访问指针,每执行一次都会向下走一行,如果有内容则返回true,同时dr访问为当前行数据集合,可以使用索引或是列名来访问相对应的数据
Console.WriteLine(dr[0]);
Console.ReadLine();
}
else
{
Console.WriteLine("读取失败!");
}
7-2.查询多条数据
if (dr.HasRows)
{
while(dr.Read()) //使用while循环读取所有数据 一行数据是一个数组,一行数据里有多少列就有多少个索引
{
Console.WriteLine(dr[0]+"----"+dr[1]);
}
Console.ReadLine();
}
else
{
Console.WriteLine("没有读到数据");
Console.ReadLine();
}
8、关闭连接
conn.Close();
例:根据用户输入一个条件查询数据、查询所有内容
static void Main1(string[] args) { //用户输入内容 Console.WriteLine("请输入要查询的名称:"); string str = Console.ReadLine(); //造连接字符串 string connstring = "server=.;database=mydb;user=sa;pwd=123"; //造连接对象 SqlConnection conn = new SqlConnection(connstring); //造命令对象 SqlCommand cmd = conn.CreateCommand(); //准备一条SQL语句 cmd.CommandText = "select * from Info where Name like '%"+str+"%'"; //打开连接 conn.Open(); //执行SQL语句 SqlDataReader dr = cmd.ExecuteReader(); //读取数据 if (dr.HasRows) { while (dr.Read()) { int n = 0; while ( n <dr.FieldCount ) //.FieldCount获取当前行的列数 { Console.Write(dr[n]+"\t"); n++; } Console.WriteLine(); } } else { Console.WriteLine("没有查到满足条件的数据"); } //关闭连接 conn.Close(); Console.ReadLine(); }
//SqlConnection conn = new SqlConnection("server=.;database=Data0928;user=sa;pwd=123"); //SqlCommand com = conn.CreateCommand(); //com.CommandText = "select ids,username,password,nickname,sex,birthday,nationname,classname from users join nation on users.nation=nation.nationcode join class on users.class=class.classcode"; //conn.Open(); //SqlDataReader dr = com.ExecuteReader(); //if (dr.HasRows) //{ // while (dr.Read()) // { // int n = 0; // while (n < dr.FieldCount) // { // if (dr[n] is Boolean) // Console.Write(((Boolean)dr[n]?"男":"女")+"\t"); // else if (dr[n] is DateTime) // Console.Write((((DateTime)dr[n]).ToShortDateString())+"\t"); // else // Console.Write(dr[n] + "\t"); // n++; // } // Console.WriteLine(); // } //} //conn.Close();
例:让用户输入要删除的数据主键值(此方法不安全)
static void Main4(string[] args) { //用户输入要删除的数据主键值 Console.WriteLine("请输入要删除的代号:"); string code = Console.ReadLine(); //判断该数据存不存在 SqlConnection conn = new SqlConnection("server=.;database=mydb;user=sa;pwd=123"); SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = "select * from Info where Code='"+code+"'"; conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows) { //说明该数据存在 Console.WriteLine("查到该数据,是否要执行删除操作,如果要删除请输入:1"); int sc = Convert.ToInt32(Console.ReadLine()); if (sc == 1) { //删除 dr.Close(); //关闭读取器 cmd.CommandText = "delete from Info where Code='"+code+"'"; cmd.ExecuteNonQuery(); Console.WriteLine("删除成功!"); } else { //不删除 dr.Read(); string sex = Convert.ToBoolean(dr[2])?"男":"女"; string nation = MinZu(dr[3].ToString()); string str = "代号:"+dr[0]+"\t姓名:"+dr[1]+"\t性别:"+sex+"\t民族:"+nation+"\t生日:"+dr[4]; Console.WriteLine(str); } } else { //数据不存在 Console.WriteLine("输入的代号错误!"); } conn.Close(); Console.ReadLine(); } static string MinZu(string code) { string name=""; SqlConnection conn = new SqlConnection("server=.;database=mydb;user=sa;pwd=123"); SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = "select Name from Nation where Code = '" + code + "'"; conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows) { dr.Read(); name = dr[0].ToString(); } conn.Close(); return name; }
例:查找用户名 并选择是修改还是删除
Console.Write("请输入要删除或更改的用户名:"); string name = Console.ReadLine(); SqlConnection conn = new SqlConnection("server=.;database=Data0928;user=sa;pwd=123"); SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = "select * from users where username='"+name+"'"; conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows) { conn.Close(); Console.WriteLine("删除选:1,更改选:2"); Console.Write("请输入您的选择:"); string a = Console.ReadLine(); if (a =="1") { cmd.CommandText = "delete from users where username='"+name+"'"; conn.Open(); int i = cmd.ExecuteNonQuery(); if (i > 0) Console.WriteLine("删除成功!!"); else Console.WriteLine("删除失败!!"); conn.Close(); } else if (a == "2") { Console.Write("请输入修改后的用户名:"); string name1 = Console.ReadLine(); cmd.CommandText = "update users set username='" + name1 + "' where username='" + name+ "'"; conn.Open(); int i = cmd.ExecuteNonQuery(); if (i > 0) Console.WriteLine("修改成功!!"); else Console.WriteLine("修改失败!!"); conn.Close(); } } else Console.WriteLine("没有您要删除或更改的用户名!"); Console.ReadLine();
例:让用户输入要添加的内容
static void Main3(string[] args) { //让用户输入要添加的内容 Console.WriteLine("请输入要添加的代号:"); string code = Console.ReadLine(); Console.WriteLine("请输入姓名:"); string name = Console.ReadLine(); Console.WriteLine("请输入性别:"); bool sex = Console.ReadLine()=="男"?true:false; Console.WriteLine("请输入民族:"); string nation = Console.ReadLine(); Console.WriteLine("请输入生日:"); string birthday = Console.ReadLine(); string nationcode = "n001"; //将民族名称转为名族代号 SqlConnection conn = new SqlConnection("server=.;database=mydb;user=sa;pwd=123"); SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = "select Code from Nation where Name = '"+nation+"'"; conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows) { dr.Read(); nationcode = dr[0].ToString(); } conn.Close(); //往Info表添加数据 cmd.CommandText = "insert into Info values('"+code+"','"+name+"','"+sex+"','"+nationcode+"','"+birthday+"')"; conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); Console.WriteLine("添加成功!"); Console.ReadLine(); }