using System; using System.Collections.Generic; using System.Text; using System.Data;//包含数据集/数据表/数据行... 类 using System.Data.SqlClient;//包含 连接/命令/适配器/读取器 类 namespace Ado_netPractise { class Program { static void Main(string[] args) { //TestConnection(); //AddRecord(); //DelRecord(); //SoftDelRecord(); //QuerySingle(); //QueryList(); //QueryListByGet(); //QueryListByAdapter(); //QueryListByProc(); QueryListProc3(); Console.Read(); } //server 指定要连接的数据库所在的服务器IP;database 要连接的数据库;windows集成身份验证=true static string conStr = @"server=.;database=SimpleArticle;Integrated Security=True;"; #region 1.测试连接通道 /// <summary> /// 测试连接通道 /// </summary> public static void TestConnection() { //1.连接通道的连接字符串 //string conStr = @"server=.;database=SimpleArticle;Integrated Security=True;"; //2.连接通道对象 SqlConnection conn = new SqlConnection(conStr); //3.打开通道 conn.Open(); //4.关闭通道 conn.Close(); //SqlConnection conn2 = new SqlConnection(); //conn2.ConnectionString = conStr; Console.WriteLine("连接对象新建操作成功~~~~:)"); } #endregion #region 2.新增记录 /// <summary> /// 新增记录 /// </summary> public static void AddRecord() { int res = -1;//准备接受新增受影响的行数 string sqlCon = "server=.;database=SimpleArticle;Integrated Security=True;"; //1.新建连接通道 SqlConnection conn = new SqlConnection(); //2.手动为连接通道对象指定连接字符串 conn.ConnectionString = sqlCon; //3.准备新增的sql命令 string sqlStr = "insert into Book(b_cid,b_title,b_content,b_author,b_money,b_isdel) values(2,'没有控件的ASP.NET','内容','未知',10,0)"; //4.新建命令对象(工人),并且告诉他要走哪条路(conn)去做什么事情(sqlStr) SqlCommand cmd = new SqlCommand(sqlStr, conn); //cmd.CommandText = sqlStr; //cmd.Connection = conStr; //5.打开连接通道 conn.Open(); //6.调用方法去数据库执行sql语句 res = cmd.ExecuteNonQuery();//执行非查询语句,此方法负责 增删改,返回受影响行数(int) //7.关闭连接通道 conn.Close(); if (res > 0) { Console.WriteLine("新增成功啦~~:)"); } else { Console.WriteLine("新增失败啦~~:("); } } #endregion #region 3.删除记录 /// <summary> /// 删除记录 /// </summary> public static void DelRecord() { int res = -1;//准备接受新增受影响的行数 string sqlCon = "server=.;database=SimpleArticle;Integrated Security=True;"; //1.新建连接通道 SqlConnection conn = new SqlConnection(sqlCon); //3.准备新增的sql命令 string sqlStr = "delete book where b_id=34"; //4.新建命令对象(工人),并且告诉他要走哪条路(conn)去做什么事情(sqlStr) SqlCommand cmd = new SqlCommand(sqlStr, conn); //5.打开连接通道 conn.Open(); //6.调用方法去数据库执行sql语句 res = cmd.ExecuteNonQuery();//此方法负责 增删改,返回受影响行数(int) //7.关闭连接通道 conn.Close(); if (res > 0) { Console.WriteLine("删除成功啦~~:)"); } else { Console.WriteLine("删除失败啦~~:("); } } #endregion #region 4.软删除记录 -- 更新语句 /// <summary> /// 软删除记录 /// </summary> public static void SoftDelRecord() { int res = -1;//准备接受新增受影响的行数 string sqlCon = "server=.;database=SimpleArticle;Integrated Security=True;"; //1.新建连接通道 SqlConnection conn = new SqlConnection(); //2.手动指定连接字符串 conn.ConnectionString = sqlCon; //3.准备新增的sql命令 string sqlStr = "update book set b_isdel=1 where b_cid=2";//删除是true(1),没删除是false(0) //4.新建命令对象(工人),并且告诉他要走哪条路(conn)去做什么事情(sqlStr) SqlCommand cmd = new SqlCommand(sqlStr, conn); //5.打开连接通道 conn.Open(); //6.调用方法去数据库执行sql语句 res = cmd.ExecuteNonQuery();//此方法负责 增删改,返回受影响行数(int) //7.关闭连接通道 conn.Close(); if (res > 0) { Console.WriteLine("软删除记录成功啦~~:)"); } else { Console.WriteLine("软删除记录失败啦~~:("); } } #endregion #region 5.查询单个值 /// <summary> /// 5.查询单个值 /// </summary> public static void QuerySingle() { SqlConnection con = new SqlConnection(conStr); //string sqlStr = "select count(*) from Book"; string sqlStr = "select * from Book"; SqlCommand cmd = new SqlCommand(sqlStr, con); con.Open(); //调用此方法,获得查询语句在数据库执行后得到的结果集的第一个单元格的值,返回类型是object object obj = cmd.ExecuteScalar(); con.Close(); Console.WriteLine(obj.ToString()); } #endregion //6.查询多行数据 //数据读取器通过连接通道在数据库中维护一个结果集,每次执行Read()方法去数据库的这个结果集中拿取下一行数据 #region 6.1查询多行数据--DataReader,逐行读取,通过下标访问列 /// <summary> /// 6.1查询多行数据--DataReader,逐行读取,通过下标访问列 /// </summary> public static void QueryListByDrIndex() { SqlConnection con = new SqlConnection(conStr); string sqlStr = "select * from Book"; SqlCommand cmd = new SqlCommand(sqlStr, con); con.Open(); //调用此方法 获得一个 读取器对象 SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows)//如果结果集有数据行,则为true,否则为false { while (dr.Read())//read方法,如果读到下一行数据,则返回true,而且dr本身就等于那一行数据 { Console.WriteLine(dr[0].ToString() + "_" + dr[1].ToString() + "_" + dr[2].ToString()); } } else Console.WriteLine("无数据"); dr.Close();//关闭读取器 con.Close();//关闭连接通道 } #endregion #region 6.1查询多行数据--DataReader,逐行读取,通过结果集的列名访问数据 /// <summary> /// 6.1查询多行数据--DataReader,逐行读取,通过结果集的列名访问数据 /// </summary> public static void QueryListByColName() { SqlConnection con = new SqlConnection(conStr); string sqlStr = "select * from Book"; SqlCommand cmd = new SqlCommand(sqlStr, con); con.Open(); //调用此方法 获得一个 读取器对象 SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows) { while (dr.Read())//read方法,如果读到下一行数据,则返回true,而且dr本身就等于那一行数据 { Console.WriteLine(dr["b_id"].ToString() + "_" + dr["b_title"].ToString() + "_" + dr["b_cid"].ToString()); } } else Console.WriteLine("无数据"); dr.Close(); con.Close(); } #endregion #region 6.3查询多行数据--DataReader,逐行读取,通过结果集的列名访问数据 /// <summary> /// 6.3查询多行数据--DataReader,逐行读取,通过Get—方法 /// </summary> public static void QueryListByGet() { SqlConnection con = new SqlConnection(conStr); string sqlStr = "select * from Book"; SqlCommand cmd = new SqlCommand(sqlStr, con); con.Open(); //调用此方法 获得一个 读取器对象 SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows) { while (dr.Read())//read方法,如果读到下一行数据,则返回true,而且dr本身就等于那一行数据 { Console.WriteLine(dr.GetInt32(0) + "_{0}_" + dr.GetString(2) + "_" + dr.GetInt32(1),"占位符"); //object o = dr.GetValue(0);//以object方式拿出数据 //Console.WriteLine(o.ToString()); //dr.GetOrdinal("b_cid");//传入列名,找到它在结果集中的下标 } } else Console.WriteLine("无数据"); dr.Close(); con.Close(); } #endregion //7.使用适配器读取数据 #region 7.1使用适配器填充数据集 /// <summary> /// 7.1使用适配器填充数据集 /// </summary> public static void QueryListByAdapter() { SqlConnection conn = new SqlConnection(conStr); string sqlStr = "select * from book"; //创建适配器对象,告诉它要做什么事情,走哪条路去 SqlDataAdapter da = new SqlDataAdapter(sqlStr, conn);//不需要代码打开和关闭连接通道 //创建数据集对象(程序端的临时数据库) DataSet ds = new DataSet(); //调用fill方法,填充数据集。(先去数据库查询结果集,并把结果集返回赋值给数据集。) da.Fill(ds); //获得数据集中的第一张表 DataTable dt = ds.Tables[0]; //循环数据表中的每一行 for (int i = 0; i < dt.Rows.Count; i++) { DataRow dr = dt.Rows[i];//将循环到的行拿出来给dr对象 //通过下标获得者一行的某列的值 Console.WriteLine(dr[0].ToString() + " __ " + dr["b_title"]); } } #endregion //7.2使用适配器填充数据表 #region 7.2使用适配器填充数据表 /// <summary> /// 7.2使用适配器填充数据表 /// </summary> public static void QueryListByAdapter2() { SqlConnection conn = new SqlConnection(conStr); string sqlStr = "select * from book"; //创建适配器对象,告诉它要做什么事情,走哪条路去 SqlDataAdapter da = new SqlDataAdapter(sqlStr, conn);//不需要代码打开和关闭连接通道 //创建数据表对象 DataTable dt = new DataTable(); //调用fill方法,填充数据集。(先去数据库查询结果集,并把结果集返回赋值给数据集。) da.Fill(dt); //循环数据表中的每一行 for (int i = 0; i < dt.Rows.Count; i++) { DataRow dr = dt.Rows[i];//将循环到的行拿出来给dr对象 //通过下标获得者一行的某列的值 Console.WriteLine(dr[0].ToString() + " __ " + dr["b_title"]); } } #endregion //8.调用存储过程 //8.1调用存储过程 public static void QueryListByProc() { SqlConnection conn = new SqlConnection(conStr); SqlCommand cmd = new SqlCommand("usp_GetBookByCateId",conn); cmd.CommandType = CommandType.StoredProcedure;//指定 命令类型 为 存储过程 SqlParameter sp = new SqlParameter();//指定 存储过程 中的 参数 sp.ParameterName = "@cateId"; sp.SqlDbType = SqlDbType.Int; //sp.Size=4; sp.Value = 2; cmd.Parameters.Add(sp);//将 参数 对象 加入到命令对象的参数集合中 SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); foreach (DataRow dr in dt.Rows) { Console.WriteLine(dr[0].ToString() + " __ "+dr[1].ToString() + " __ " + dr["b_title"]); } } //8.1.1调用含多个参数的存储过程 #region 8.1.1调用含多个参数的存储过程 /// <summary> /// 8.1.1调用含多个参数的存储过程 /// </summary> public static void QueryListByProc2() { string sqlCon = "server=.;database=SimpleArticle;Integrated Security=True;"; SqlConnection conn = new SqlConnection(sqlCon); SqlCommand cmd = new SqlCommand("proGetPageData", conn); cmd.CommandType = CommandType.StoredProcedure;//指定作为存储过程执行 //SqlParameter p = new SqlParameter("@aa", SqlDbType.Int); //SqlParameter p = new SqlParameter("@aa", 8); SqlParameter[] paras ={ new SqlParameter("@pageIndex", SqlDbType.Int,4), new SqlParameter("@pageSize", SqlDbType.Int,4) }; paras[0].Value = 1;//设置搜索第1页 paras[1].Value = 3;//设置每页显示3条 cmd.Parameters.AddRange(paras);//为cmd对象添加 参数数组 SqlDataAdapter da = new SqlDataAdapter(cmd);//创建 适配器 DataTable dt = new DataTable();//创建 数据表(程序端) da.Fill(dt); foreach (DataRow dr in dt.Rows) { Console.WriteLine(dr[0].ToString() + " -- " + dr[1].ToString() + " -- " + dr[2].ToString()); } } #endregion //8.2调用带输出参数存储过程 #region 8.2调用带输出参数存储过程 /// <summary> /// 8.2调用带输出参数存储过程 /// </summary> public static void QueryListProc3() { SqlConnection conn = new SqlConnection(conStr); SqlCommand cmd = new SqlCommand("proGetPageData2", conn); cmd.CommandType = CommandType.StoredProcedure;//指定为存储过程 SqlParameter[] paras ={ new SqlParameter("@pageIndex",SqlDbType.Int), new SqlParameter("@pageSize",SqlDbType.Int), new SqlParameter("@pageCount",SqlDbType.Int), new SqlParameter("@rowCount",SqlDbType.Int) }; paras[0].Value = 2;//页码 paras[1].Value = 2;//页容量 paras[2].Direction = ParameterDirection.Output;//设置参数的输出方向 paras[3].Direction = ParameterDirection.Output;//设置参数的输出方向 cmd.Parameters.AddRange(paras);//讲参数加入命令对象 SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); foreach (DataRow dr in dt.Rows) { Console.WriteLine(dr[0].ToString() + " -- " + dr[1].ToString() + " -- " + dr[2].ToString()); } int pageCount = Convert.ToInt32(cmd.Parameters[2].Value); int rowCount = Convert.ToInt32(cmd.Parameters[3].Value); Console.WriteLine("pageCount=" + pageCount + ",rowCount=" + rowCount); } #endregion } }
转载于:https://www.cnblogs.com/zxj159/articles/2446314.html