数据访问
对应命名空间:System.Data.SqlClient;
SqlConnection:连接对象 conn
SqlCommand:命令对象 cmd
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 Student";
//4-2:添加
cmd.CommandText = "Insert into Student values('p032','毒哥','True','n001','1987-02-02')";
//4-3:删除
cmd.CommandText = "delete from Student where Code='p032';
//4-4:更改
cmd.CommandText = "update Student set name='情方方' where Code='p032';
【打开连接】
conn.Open(); //可放在执行之前的任意位置
5.执行操作
5-1:(适用于查询语句),如果查询到返回true
SqlDataReader dr = cmd.ExecuteReader();
//5-2.执行操作(增删改操作,返回行数)
cmd.ExecuteNonQuery();
6.处理数据
6-1:查询一条数据
if (dr.HasRows) //HasRows 判断是否有行数据 bool型,返回true/false
{
dr.Read(); //dr.Read() 是数据库数据访问指针,每执行一次都会向下走一行,如果有内容则返回true,同时dr访问为当前行数据集合,
可以使用索引或是列名来访问相对应的数据
Console.WriteLine(dr[0]);
Console.ReadLine();
}
else
{
Console.WriteLine("读取失败!");
}
//6-2.查询多条数据
if (dr.HasRows)
{
while(dr.Read()) //使用while循环读取所有数据 一行数据是一个数组,一行数据里有多少列就有多少个索引
{
Console.WriteLine(dr[0]+"----"+dr[1]);
}
Console.ReadLine();
}
else
{
Console.WriteLine("没有读到数据");
Console.ReadLine();
}
【关闭连接】
conn.Close();
练习:1。向数据库Student表中插入一条数据,
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; namespace 练习2 { class Program { static void Main(string[] args) { //创建数据库连接 SqlConnection conn = new SqlConnection("server=localhost;database=stu0314;user=sa;pwd=123;");//数据库连接类 SqlCommand cmd = conn.CreateCommand();//数据库操作类 string name = ""; //姓名不能为空,插入数据的时候姓名不能和数据库中的数据重复 while (true) { Console.Write("请输入要添加的用户名:"); name = Console.ReadLine(); bool has = false; if (name.Length == 0) Console.WriteLine("用户名不能为空,请重新输入"); else { cmd.CommandText = "select * from Users where UserName=@a";//@a表示占位符,可以防止字符型攻击 cmd.Parameters.Clear();//每次输入之前都要进行清空,才能输入 cmd.Parameters.AddWithValue("@a", name); conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows) has = true; conn.Close(); if (has) { Console.WriteLine("您输入的用户名重复,请重新输入"); } else { break; } } } string pwd = ""; //密码的长度不能小于6为数 while (true) { Console.Write("请输入要添加的密码:"); pwd = Console.ReadLine(); if (pwd.Length < 6) Console.WriteLine("请重新输入大于6位数的密码。"); else break; } string nikename = ""; //用户名不能为空 while (true) { Console.Write("请输入要添加的昵称:"); nikename = Console.ReadLine(); if (nikename.Length == 0) Console.WriteLine("用户名不能为空,请重新输入"); else break; } string sex = ""; bool sex1; //用户只能输入男或女才行,否则直达输入正确为止 while (true) { Console.Write("请输入要添加的性别:"); sex = Console.ReadLine(); if (sex == "男") { sex1 = true; break; } else if (sex == "女") { sex1 = false; break; } else { Console.WriteLine("输入错误,性别只能输入男或女,请重新输入"); } } //用户输入的生日必须正确 Console.Write("请输入要添加的生日:"); string bir = Console.ReadLine(); try { DateTime bir1 = Convert.ToDateTime(bir); } catch { Console.WriteLine("您输入的生日不对,请重新输入"); } string nation=""; //根据数据库表中的民族,进行输入 while (true) { Console.Write("请输入要添加的民族:"); nation = Console.ReadLine(); if (nation == "汉族" || nation == "汉") { nation = "n001"; break; } else if (nation == "壮族" || nation == "壮") { nation = "n002"; break; } else if (nation == "傣族" || nation == "傣") { nation = "n003"; break; } else if (nation == "朝鲜族" || nation == "朝鲜") { nation = "n004"; break; } else { Console.WriteLine("咱不支持你输入的名族,请输入以下名族(汉族/壮族/傣族/朝鲜族)"); } } string cla=""; //根据数据库中的班级数据进行输入 while (true) { Console.Write("请输入要添加的班级:"); cla = Console.ReadLine(); if (cla == "计算机班") { cla = "c001"; break; } else if (cla == "数学班") { cla = "c002"; break; } else if (cla == "语文班") { cla = "c003"; break; } else if (cla == "英语班") { cla = "c004"; break; } else { Console.WriteLine("咱不开设你输入的班级,请输入以下名族(计算机班/数学班/语文班/数学班)"); } } cmd.CommandText = "insert into Users values(@a,@b,@c,@d,@e,@f,@g)"; cmd.Parameters.Clear(); cmd.Parameters.AddWithValue("@a", name); cmd.Parameters.AddWithValue("@b", pwd); cmd.Parameters.AddWithValue("@c", nikename); cmd.Parameters.AddWithValue("@d", sex1); cmd.Parameters.AddWithValue("@e", bir); cmd.Parameters.AddWithValue("@f", nation); cmd.Parameters.AddWithValue("@g", cla); conn.Open(); int i = cmd.ExecuteNonQuery(); if (i > 0) Console.WriteLine("插入数据成功"); else Console.WriteLine("插入失败"); conn.Close(); Console.ReadLine(); } } }
2.创建一个学生表,只输入学生的姓名(需要判断是否重复,不能为空),学生的id自动生成格式(S001),每次自动加1
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; namespace 练习5 { class Program { static void Main(string[] args) { SqlConnection conn = new SqlConnection("server=localhost;database=stu0314;user=sa;pwd=123;"); SqlCommand cmd = conn.CreateCommand(); string name = ""; while (true) { Console.Write("请输入学生姓名:"); name = Console.ReadLine(); if (name.Length == 0) { Console.WriteLine("姓名不能为空,请重新输入"); } else { cmd.CommandText = "select * from Student where Sname='"+name+"'"; conn.Open(); SqlDataReader dr1 = cmd.ExecuteReader(); if (dr1.HasRows) Console.WriteLine("姓名不能重复"); conn.Close(); } } string nub = "S001";//设置nub的初始值为S001 cmd.CommandText = "select * from Student"; conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows) { List<string> list = new List<string>();//用泛型集合存放数据库中的所有nub while (dr.Read()) { list.Add( dr[1].ToString());//给泛型集合添加数据 } nub = list[list.Count - 1].ToString();//取出最后一个nub for (int i = 0; i < list.Count; i++)//遍历所有的数据 { if (nub == list[i])//对数据进行判断 { int j = Convert.ToInt32(list[i].Substring(1, 3)); if (j > 0 && j < 10) { j++; nub = ("S00" + j).ToString(); break; } else if (j > 10 && j < 99) { j++; nub = ("S0" + j).ToString(); break; } else if (j > 100 && j < 999) { j++; nub = ("S" + j).ToString(); break; } } } } conn.Close(); //将生成的数据插入到数据库中 cmd.CommandText = "insert into Student values(@a,@b)"; cmd.Parameters.Clear(); cmd.Parameters.AddWithValue("@a",name); cmd.Parameters.AddWithValue("@b", nub); conn.Open(); int endi = cmd.ExecuteNonQuery(); if (endi > 0) { Console.WriteLine("插入数据成功"); } else Console.WriteLine("插入数据失败"); conn.Close(); Console.ReadLine(); } } }