ADO.NET复习总结(4)--访问SqlServer的类
生活随笔
收集整理的這篇文章主要介紹了
ADO.NET复习总结(4)--访问SqlServer的类
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1、連接SqlConnection
2、
3、執(zhí)行命令SqlCommand
4、數(shù)據(jù)讀取SqlDataReader
?
?注意:
ExecuteNonQuery() :執(zhí)行非查詢(增刪改)
ExecuteScalar(): 執(zhí)行查詢,獲取單個(gè)值,返回單行單列
ExecuteReader() :執(zhí)行查詢,獲取多個(gè)值,返回多行多列
示例代碼:
1.插入語句測試 ? ? ?ExecuteNonQuery() 方法
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){//1.連接字符串string constr = "Data Source=.;Initial Catalog=dbtest;User Id=sa;Password=123;";//2.創(chuàng)建連接對(duì)象using(SqlConnection conn=new SqlConnection (constr)){//3.SQL 語句string sql = "insert into test2 values('戰(zhàn)狼') ";//4.創(chuàng)建SQLcommand對(duì)象using(SqlCommand cmd=new SqlCommand (sql,con)){//5.打開連接 conn.Open();//6.執(zhí)行int r = cmd.ExecuteNonQuery();Console.WriteLine("成功的插入了{(lán)0}行。", r);}}Console.ReadKey();}} } View Code2.查詢,獲取多個(gè)值 ? ?ExecuteReader()方法,返回類型datareader
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient;namespace _02 {class Program{static void Main(string[] args){//1.連接字符串string constr = "Data Source=.;Initial Catalog=dbtest;User Id=sa;Password=123;";//2.創(chuàng)建連接對(duì)象using (SqlConnection conn = new SqlConnection(constr)){//3.SQL 語句string sql = "select * from StudentInfo";//4.創(chuàng)建SQLcommand對(duì)象using (SqlCommand cmd = new SqlCommand(sql, conn)){//5.打開連接 conn.Open();//6.執(zhí)行//通過調(diào)用ExecuteReader()方法,將給定的sql語句在服務(wù)器中執(zhí)行。//執(zhí)行完畢后,服務(wù)器就已經(jīng)查詢出了數(shù)據(jù)。但是數(shù)據(jù)是保存在數(shù)據(jù)庫服務(wù)器的內(nèi)存當(dāng)中。//并沒有返回給應(yīng)用程序。知識(shí)返回給了應(yīng)用程序一個(gè)reader對(duì)象,這個(gè)對(duì)象就是用來獲取數(shù)據(jù)的對(duì)象。using ( SqlDataReader reader = cmd.ExecuteReader()){//接下來就要通過reader對(duì)象一條一條獲取數(shù)據(jù)//1、在獲取數(shù)據(jù)之前,先判斷一下本次執(zhí)行查詢之后,是否查詢到了數(shù)據(jù)if (reader.HasRows)//屬性HasRows判斷是否結(jié)果集中有行 {//2.有數(shù)據(jù),那么接下來就要一條一條獲取數(shù)據(jù)‘//每次獲取數(shù)據(jù)之前,都要先調(diào)用reader.Read()方法,向后移動(dòng)一條數(shù)據(jù),如果成功移到了某條數(shù)據(jù)上,則返回true,否則為FALSEwhile(reader.Read()){//獲取當(dāng)前reader指向的數(shù)據(jù)(一行多列)//reader.FieldCount,可以查詢當(dāng)前查詢語句查詢出列的個(gè)數(shù)。for (int i = 0; i < reader.FieldCount; i++){Console.Write(reader[i] + " | ");}Console.WriteLine();}}else{Console.WriteLine("沒有任何數(shù)據(jù)");}}}}Console.ReadKey();}} } View Code using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient;namespace _02 {class Program{static void Main(string[] args){//1.連接字符串string constr = "Data Source=.;Initial Catalog=dbtest;User Id=sa;Password=123;";//2.創(chuàng)建連接對(duì)象using (SqlConnection conn = new SqlConnection(constr)){//3.SQL 語句string sql = "select * from StudentInfo";//4.創(chuàng)建SQLcommand對(duì)象using (SqlCommand cmd = new SqlCommand(sql, conn)){//5.打開連接 conn.Open();//6.執(zhí)行//通過調(diào)用ExecuteReader()方法,將給定的sql語句在服務(wù)器中執(zhí)行。//執(zhí)行完畢后,服務(wù)器就已經(jīng)查詢出了數(shù)據(jù)。但是數(shù)據(jù)是保存在數(shù)據(jù)庫服務(wù)器的內(nèi)存當(dāng)中。//并沒有返回給應(yīng)用程序。知識(shí)返回給了應(yīng)用程序一個(gè)reader對(duì)象,這個(gè)對(duì)象就是用來獲取數(shù)據(jù)的對(duì)象。using ( SqlDataReader reader = cmd.ExecuteReader()){//接下來就要通過reader對(duì)象一條一條獲取數(shù)據(jù)//1、在獲取數(shù)據(jù)之前,先判斷一下本次執(zhí)行查詢之后,是否查詢到了數(shù)據(jù)if (reader.HasRows)//屬性HasRows判斷是否結(jié)果集中有行 {//2.有數(shù)據(jù),那么接下來就要一條一條獲取數(shù)據(jù)‘//每次獲取數(shù)據(jù)之前,都要先調(diào)用reader.Read()方法,向后移動(dòng)一條數(shù)據(jù),如果成功移到了某條數(shù)據(jù)上,則返回true,否則為FALSEwhile(reader.Read()){//獲取當(dāng)前reader指向的數(shù)據(jù)(一行多列)//reader.FieldCount,可以查詢當(dāng)前查詢語句查詢出列的個(gè)數(shù)。for (int i = 0; i < reader.FieldCount; i++){//但是通過reader【】索引器,可以使用列名獲取列的值// Console.Write(reader[i] + " | "); Console.Write(reader["sid"] );//根據(jù)列名稱獲取列的索引//reader.Getordinal();//GetValue()只能通過列索引來獲取列的值Console.Write(reader.GetValue(i) + " | ");}Console.WriteLine();}}else{Console.WriteLine("沒有任何數(shù)據(jù)");}}}}Console.ReadKey();}} } View Code注意:
當(dāng)遇到數(shù)據(jù)庫中的null值的時(shí)候,通過Reader.GetValue()或者reader()索引器來獲取列的值,
拿到的是DBNull.Value,不是C#的Null,而DBNull.Value的ToString()方法返回的空字符串,所以最終沒有報(bào)錯(cuò)。
?
//大多數(shù)用下面這種方法//通過下面這種方式讀取到的數(shù)據(jù)直接就是對(duì)應(yīng)的類型,不是object類型,使用起來更方便。reader.Getxxxxx()//使用強(qiáng)類型讀取列中的數(shù)據(jù)?2、SqlDataReader
?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient;namespace _02 {class Program{static void Main(string[] args){#region 版本1////1.連接字符串//string constr = "Data Source=.;Initial Catalog=dbtest;User Id=sa;Password=123;";////2.創(chuàng)建連接對(duì)象//using (SqlConnection conn = new SqlConnection(constr))//{// //3.SQL 語句// string sql = "select * from StudentInfo";// //4.創(chuàng)建SQLcommand對(duì)象// using (SqlCommand cmd = new SqlCommand(sql, conn))// {// //5.打開連接// conn.Open();// //6.執(zhí)行// //通過調(diào)用ExecuteReader()方法,將給定的sql語句在服務(wù)器中執(zhí)行。// //執(zhí)行完畢后,服務(wù)器就已經(jīng)查詢出了數(shù)據(jù)。但是數(shù)據(jù)是保存在數(shù)據(jù)庫服務(wù)器的內(nèi)存當(dāng)中。// //并沒有返回給應(yīng)用程序。知識(shí)返回給了應(yīng)用程序一個(gè)reader對(duì)象,這個(gè)對(duì)象就是用來獲取數(shù)據(jù)的對(duì)象。// using (SqlDataReader reader = cmd.ExecuteReader())// {// //接下來就要通過reader對(duì)象一條一條獲取數(shù)據(jù)// //1、在獲取數(shù)據(jù)之前,先判斷一下本次執(zhí)行查詢之后,是否查詢到了數(shù)據(jù)// if (reader.HasRows)//屬性HasRows判斷是否結(jié)果集中有行// {// //2.有數(shù)據(jù),那么接下來就要一條一條獲取數(shù)據(jù)‘// //每次獲取數(shù)據(jù)之前,都要先調(diào)用reader.Read()方法,向后移動(dòng)一條數(shù)據(jù),如果成功移到了某條數(shù)據(jù)上,則返回true,否則為FALSE// while (reader.Read())// {// //獲取當(dāng)前reader指向的數(shù)據(jù)(一行多列)// //reader.FieldCount,可以查詢當(dāng)前查詢語句查詢出列的個(gè)數(shù)。// for (int i = 0; i < reader.FieldCount; i++)// {// //但是通過reader【】索引器,可以使用列名獲取列的值// // Console.Write(reader[i] + " | ");// Console.Write(reader["sid"]);// //根據(jù)列名稱獲取列的索引// //reader.Getordinal();// //GetValue()只能通過列索引來獲取列的值// // Console.Write(reader.GetValue(i) + " | ");// //大多數(shù)用下面這種方法// //通過下面這種方式讀取到的數(shù)據(jù)直接就是對(duì)應(yīng)的類型,不是object類型,使用起來更方便。// // reader.Getxxxxx()//使用強(qiáng)類型讀取列中的數(shù)據(jù)// }// Console.WriteLine();// }// }// else// {// Console.WriteLine("沒有任何數(shù)據(jù)");// }// }// }//}#endregion#region 版本2string constr = "Data Source=.;Initial Catalog=dbtest;User Id=sa;Password=123;";using (SqlConnection conn = new SqlConnection(constr)){string sql = "select * from StudentInfo";using (SqlCommand cmd = new SqlCommand(sql, conn)){conn.Open();using (SqlDataReader reader = cmd.ExecuteReader()){if (reader.HasRows){//注意通過reader.GetXxxx()方式來獲取表中的數(shù)據(jù),如果數(shù)據(jù)為null,那么久報(bào)異常了,此時(shí)需要手動(dòng)寫代碼來判斷數(shù)據(jù)是否為nullwhile (reader.Read()){//sId, sName, sGender, sBirthday, sPhone, sEMail, cid//打印每一列的值Console.Write(reader.GetInt32(0) + "\t||\t");Console.Write(reader.GetString(1) + "\t||\t");Console.Write(reader.GetBoolean(2) + "\t||\t");Console.Write(reader.GetDateTime(3) + "\t||\t");Console.Write(reader.IsDBNull(4)?"NULL":reader.GetString(4)+ "\t||\t");//Console.Write(reader.GetString(4) + "\t||\t");Console.Write(reader.GetString(5) + "\t||\t");Console.Write(reader.GetSqlInt32(6) + "\t||\t");}}}}#endregionConsole.ReadKey();}}} } View Code?
轉(zhuǎn)載于:https://www.cnblogs.com/mhq-martin/p/8087683.html
總結(jié)
以上是生活随笔為你收集整理的ADO.NET复习总结(4)--访问SqlServer的类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 守护线程与非守护线程的区别
- 下一篇: 股价相对于转股价溢价的时候,可转债就是折