ADO.NET复习总结(4)--访问SqlServer的类

1、连接SqlConnection

2、

3、执行命令SqlCommand

4、数据读取SqlDataReader

 

 注意:

ExecuteNonQuery() :执行非查询(增删改)

ExecuteScalar(): 执行查询,获取单个值,返回单行单列

ExecuteReader() :执行查询,获取多个值,返回多行多列

示例代码:

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.创建连接对象
            using(SqlConnection conn=new SqlConnection (constr))
            {
                //3.SQL 语句
                string sql = "insert into test2 values('战狼') ";
                //4.创建SQLcommand对象
                using(SqlCommand cmd=new SqlCommand (sql,con))
                {
                    //5.打开连接
                    conn.Open();
                    //6.执行
                    int r = cmd.ExecuteNonQuery();
                    Console.WriteLine("成功的插入了{0}行。", r);
                }
            }
            Console.ReadKey();
        }
    }
}
View Code

2.查询,获取多个值    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.创建连接对象
            using (SqlConnection conn = new SqlConnection(constr))
            {
                //3.SQL 语句
                string sql = "select * from  StudentInfo";
                //4.创建SQLcommand对象
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    //5.打开连接
                    conn.Open();
                    //6.执行
                    //通过调用ExecuteReader()方法,将给定的sql语句在服务器中执行。
                    //执行完毕后,服务器就已经查询出了数据。但是数据是保存在数据库服务器的内存当中。
                    //并没有返回给应用程序。知识返回给了应用程序一个reader对象,这个对象就是用来获取数据的对象。
                    using ( SqlDataReader reader = cmd.ExecuteReader())
                    {
                        //接下来就要通过reader对象一条一条获取数据
                        //1、在获取数据之前,先判断一下本次执行查询之后,是否查询到了数据
                        if (reader.HasRows)//属性HasRows判断是否结果集中有行
                        {
                            //2.有数据,那么接下来就要一条一条获取数据‘
                            //每次获取数据之前,都要先调用reader.Read()方法,向后移动一条数据,如果成功移到了某条数据上,则返回true,否则为FALSE
                            while(reader.Read())
                            {
                               //获取当前reader指向的数据(一行多列)
                                //reader.FieldCount,可以查询当前查询语句查询出列的个数。
                                for (int i = 0; i < reader.FieldCount; i++)
                                {
                                    Console.Write(reader[i] + "    |    ");
                                    
                                }
                                Console.WriteLine();
                            }
                        }
                        else
                        {
                          Console.WriteLine("没有任何数据");
                        }
                    }
                }
            }
            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.创建连接对象
            using (SqlConnection conn = new SqlConnection(constr))
            {
                //3.SQL 语句
                string sql = "select * from  StudentInfo";
                //4.创建SQLcommand对象
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    //5.打开连接
                    conn.Open();
                    //6.执行
                    //通过调用ExecuteReader()方法,将给定的sql语句在服务器中执行。
                    //执行完毕后,服务器就已经查询出了数据。但是数据是保存在数据库服务器的内存当中。
                    //并没有返回给应用程序。知识返回给了应用程序一个reader对象,这个对象就是用来获取数据的对象。
                    using ( SqlDataReader reader = cmd.ExecuteReader())
                    {
                        //接下来就要通过reader对象一条一条获取数据
                        //1、在获取数据之前,先判断一下本次执行查询之后,是否查询到了数据
                        if (reader.HasRows)//属性HasRows判断是否结果集中有行
                        {
                            //2.有数据,那么接下来就要一条一条获取数据‘
                            //每次获取数据之前,都要先调用reader.Read()方法,向后移动一条数据,如果成功移到了某条数据上,则返回true,否则为FALSE
                            while(reader.Read())
                            {
                               //获取当前reader指向的数据(一行多列)
                                //reader.FieldCount,可以查询当前查询语句查询出列的个数。
                                for (int i = 0; i < reader.FieldCount; i++)
                                {
                                    //但是通过reader【】索引器,可以使用列名获取列的值
                                   // Console.Write(reader[i] + "    |    ");
                                   
                                      Console.Write(reader["sid"] );

                                    //根据列名称获取列的索引
                                    //reader.Getordinal();
                                    
                                    //GetValue()只能通过列索引来获取列的值
                                    Console.Write(reader.GetValue(i) + "  |  ");
                                    
                                }
                                Console.WriteLine();
                            }
                        }
                        else
                        {
                          Console.WriteLine("没有任何数据");
                        }
                    }
                }
            }
            Console.ReadKey();
        }
    }
}
View Code

注意:

当遇到数据库中的null值的时候,通过Reader.GetValue()或者reader()索引器来获取列的值,

拿到的是DBNull.Value,不是C#Null,而DBNull.ValueToString()方法返回的空字符串,所以最终没有报错。

 //大多数用下面这种方法
                                    //通过下面这种方式读取到的数据直接就是对应的类型,不是object类型,使用起来更方便。
                                    reader.Getxxxxx()//使用强类型读取列中的数据
                                    

 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.创建连接对象
            //using (SqlConnection conn = new SqlConnection(constr))
            //{
            //    //3.SQL 语句
            //    string sql = "select * from  StudentInfo";
            //    //4.创建SQLcommand对象
            //    using (SqlCommand cmd = new SqlCommand(sql, conn))
            //    {
            //        //5.打开连接
            //        conn.Open();
            //        //6.执行
            //        //通过调用ExecuteReader()方法,将给定的sql语句在服务器中执行。
            //        //执行完毕后,服务器就已经查询出了数据。但是数据是保存在数据库服务器的内存当中。
            //        //并没有返回给应用程序。知识返回给了应用程序一个reader对象,这个对象就是用来获取数据的对象。
            //        using (SqlDataReader reader = cmd.ExecuteReader())
            //        {
            //            //接下来就要通过reader对象一条一条获取数据
            //            //1、在获取数据之前,先判断一下本次执行查询之后,是否查询到了数据
            //            if (reader.HasRows)//属性HasRows判断是否结果集中有行
            //            {
            //                //2.有数据,那么接下来就要一条一条获取数据‘
            //                //每次获取数据之前,都要先调用reader.Read()方法,向后移动一条数据,如果成功移到了某条数据上,则返回true,否则为FALSE
            //                while (reader.Read())
            //                {
            //                    //获取当前reader指向的数据(一行多列)
            //                    //reader.FieldCount,可以查询当前查询语句查询出列的个数。
            //                    for (int i = 0; i < reader.FieldCount; i++)
            //                    {
            //                        //但是通过reader【】索引器,可以使用列名获取列的值
            //                        // Console.Write(reader[i] + "    |    ");

            //                        Console.Write(reader["sid"]);

            //                        //根据列名称获取列的索引
            //                        //reader.Getordinal();

            //                        //GetValue()只能通过列索引来获取列的值
            //                        //  Console.Write(reader.GetValue(i) + "  |  ");

            //                        //大多数用下面这种方法
            //                        //通过下面这种方式读取到的数据直接就是对应的类型,不是object类型,使用起来更方便。
            //                        //  reader.Getxxxxx()//使用强类型读取列中的数据

            //                    }
            //                    Console.WriteLine();
            //                }
            //            }
            //            else
            //            {
            //                Console.WriteLine("没有任何数据");
            //            }
            //        }
            //    }
            //}
            #endregion

            #region 版本2
            string 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()方式来获取表中的数据,如果数据为null,那么久报异常了,此时需要手动写代码来判断数据是否为null
                            while (reader.Read())
                            {
                                //sId, sName, sGender, sBirthday, sPhone, sEMail, cid
                                //打印每一列的值
                                Console.Write(reader.GetInt32(0) + "	||	");
                                Console.Write(reader.GetString(1) + "	||	");
                                Console.Write(reader.GetBoolean(2) + "	||	");
                                Console.Write(reader.GetDateTime(3) + "	||	");

                                Console.Write(reader.IsDBNull(4)?"NULL":reader.GetString(4)+ "	||	");

                              //Console.Write(reader.GetString(4) + "	||	");
                                Console.Write(reader.GetString(5) + "	||	");
                                Console.Write(reader.GetSqlInt32(6) + "	||	");
                            }
                        }
                    }
                }
            #endregion
                Console.ReadKey();
            }
        }
    }
}
View Code

原文地址:https://www.cnblogs.com/mhq-martin/p/8087683.html