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. Git 进阶 —— 远程仓库

    一.远程仓库怎么玩 1. 自己搭建一个运行Git的服务器 Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上,但肯定有一台机器有着最原始的版本库,然后别的机器来克隆这个原始版本库,这 ...

  2. Sticky Footer 绝对底部的两种套路

    最近面了好几个前端,工作经验有高有低,居然都不知道绝对底部是什么,也没有人能说出一种实现方式,让我不禁感慨前端领域的良莠不齐 绝对底部,或者说 Sticky Footer,是一种古老且经典的页面效果: ...

  3. Python day 3 (3)

    一:判断语句: 1  if 语句 : 2  或者if 语句 : else : 3  或者if 语句 : elif 语句 : else : 4注意:的使用,缩进一般用4个空格来完成. 二:input 语 ...

  4. Android 获取唯一标识替代方法

    private static String getTheOnlyID() { String onlyOne; //获取IMEI TelephonyManager TelephonyMgr = (Tel ...

  5. 总结Oracle8i 的UNDO表空间损坏(ORA-01092及ORA-00600【4193】)情况下的数据库不完全恢复的经历

    服务器断电重启导致备份生产环境的恢复目录库无法进行启动,提示Ora-01092例程终止.强行断开连接 查看跟踪日志: Wed Jan 10 08:41:37 2018 Errors in file d ...

  6. 【转载】漫谈HADOOP HDFS BALANCER

    Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的数据节点.当HDFS出现不平衡状况的时候,将引发很多问题,比如MR程序无法很好地利用本地计算的优势,机器之 ...

  7. Percona Toolkit 2.2.19 is now available

    New Features: 1221372: pt-online-schema-change now aborts with an error if the server is a slave, be ...

  8. Chris Richardson微服务翻译:微服务架构中的服务发现

    Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现(本文) 微服务之事件驱动的数据管理 微服 ...

  9. CSS 设置table下tbody滚动条

    table tbody { display:block; height:195px; overflow-y:scroll; } table thead, tbody tr { display:tabl ...

  10. 浅谈我的MongoDB学习(一)

    这是第一次写博客,不当之处敬请见谅,最近由于项目需要,对mongodb略有研究,网上也有一些相关资料,下面是我自己摸索的一些东西,希望能跟大家分享一下当然,这也是我自己第一次在项目中使用,若理解有误, ...