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();
}
}
}

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 = ; i < reader.FieldCount; i++)
{
Console.Write(reader[i] + " | "); }
Console.WriteLine();
}
}
else
{
Console.WriteLine("没有任何数据");
}
}
}
}
Console.ReadKey();
}
}
}
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 = ; 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();
}
}
}

注意:

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

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

 //大多数用下面这种方法
//通过下面这种方式读取到的数据直接就是对应的类型,不是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() + "\t||\t");
Console.Write(reader.GetString() + "\t||\t");
Console.Write(reader.GetBoolean() + "\t||\t");
Console.Write(reader.GetDateTime() + "\t||\t"); Console.Write(reader.IsDBNull()?"NULL":reader.GetString()+ "\t||\t"); //Console.Write(reader.GetString(4) + "\t||\t");
Console.Write(reader.GetString() + "\t||\t");
Console.Write(reader.GetSqlInt32() + "\t||\t");
}
}
}
}
#endregion
Console.ReadKey();
}
}
}
}

ADO.NET复习总结(4)--访问SqlServer的类的更多相关文章

  1. ADO.NET复习总结(5)--工具类SqlHelper 实现登录

    工具类SqlHelper 即:完成常用数据库操作的代码封装 一.基础知识1.每次进行操作时,不变的代码: (1)连接字符串:(2)往集合存值:(3)创建连接对象.命令对象:(4)打开连接:(5)执行命 ...

  2. NX二次开发-NX访问SqlServer数据库(增删改查)C#版

    版本:NX9+VS2012+SqlServer2008r2 以前我写过一个NX访问MySQL数据库(增删改查)的文章https://www.cnblogs.com/nxopen2018/p/12297 ...

  3. Java jdbc访问sqlserver,oracle数据库

    1.JDBC访问Oracle数据库 public class Jdbc_Oracle { // 静态代码块,只会执行一次,类似C#静态构造方法 static { try { // 加载数据库驱动一次 ...

  4. 使用JDBC访问SQLServer 2008

    使用JDBC访问SQLServer 2008 // 准备数据库驱动程序 String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriv ...

  5. asp.net学习之ado.net(连接模式访问)

    原文:asp.net学习之ado.net(连接模式访问)    ado.net框架支持两种模式的数据访问: 连接模式(Connected)和非连接模式(disconnected).这一节介绍如何使用连 ...

  6. Java jdbc访问sqlserver,oracle数据库 DEMO

    1.JDBC访问Oracle数据库 public class Jdbc_Oracle { // 静态代码块,只会执行一次,类似C#静态构造方法 static { try { // 加载数据库驱动一次 ...

  7. Oracle透明网关访问SQLServer数据库

    针对oracle数据库不同实例之间的数据访问,我们可以直接通过dblink访问,如果oracle数据库想访问mysql/sqlserver等数据库的数据,我们可以通过配置oracle透明网关实现异构数 ...

  8. VS2019项目docker启动且访问SQLSERVER数据库配置

    VS2019编译.调试的Blazor纯前台项目,使用控制台启动,去连接纯后台的API项目,使用docker启动,并且通过EFCore访问SQLSERVER数据库,有几个地方需要修改配置: 一.前台连后 ...

  9. ADO.NET(完整修改和查询、实体类,数据访问类)

    一.完整修改和查询 在编写c#语句时需考虑到用户体验,例如在编写修改语句时,需要考虑到输入的内容在数据库中是否能够找到. 中间变量运用. 1.先查 2.执行操作 完整修改语句: bool has = ...

随机推荐

  1. CSS3 转换2D transform

    Transform字面上就是变形,改变的意思.在CSS3中transform主要包括以下几种:旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix.下面我们一 ...

  2. vue 自定义组件 v-model双向绑定、 父子组件同步通信

    父子组件通信,都是单项的,很多时候需要双向通信.方法如下: 1.父组件使用:msg.sync="aa"  子组件使用$emit('update:msg', 'msg改变后的值xxx ...

  3. NOTIC: Invalid argument supplied for foreach()

    NOTIC: [2] Invalid argument supplied for foreach() Warning: Invalid argument supplied for foreach() ...

  4. Spring异常处理@ExceptionHandler

    最近学习Spring时,认识到Spring异常处理的强大.之前处理工程异常,代码中最常见的就是try-catch-finally,有时一个try,多个catch,覆盖了核心业务逻辑: try{ ... ...

  5. Spark算子篇 --Spark算子之aggregateByKey详解

    一.基本介绍 rdd.aggregateByKey(3, seqFunc, combFunc) 其中第一个函数是初始值 3代表每次分完组之后的每个组的初始值. seqFunc代表combine的聚合逻 ...

  6. Flask知识点二

    一  模板 1.模板的使用 Flask使用的是Jinja2模板,所以其语法和Django无差别 2.自定义模板方法 Flask中自定义模板方法的方式和Bottle相似,创建一个函数并通过参数的形式传入 ...

  7. 6、ABPZero系列教程之拼多多卖家工具 框架后台的设置

    接着上篇文章,现在去修改注册登录逻辑代码还为时过早,我们还需要到后台去设置一些配置. 管理---设置 先配置好这2项设置,邮箱配置是为了验证注册时功能是否正常,下一篇文章需要用到. 注:邮箱配置中的密 ...

  8. .net的retrofit--WebApiClient库深入篇

    前言 本篇文章的内容是对上一篇.net的retrofit--WebApiClient库的深层次补充,你可能需要先阅读上一篇才能理解此篇文章.本文将详细地讲解WebApiClient的原理,结合实际项目 ...

  9. [译]Python面试中8个必考问题

    1.下面这段代码的输出结果是什么?请解释. def extendList(val, list=[]): list.append(val) return list list1 = extendList( ...

  10. 循序渐进之Spring AOP(4) - Introduction

    前面描述的几种增强(Advice)都是在目标方法范围内织入,而引介(Introduction)不同,直接在类级别上添加目标未实现的接口方法. 在spring中可以通过扩展DelegatingIntro ...