从C#中连接到SQL Server数据库,再通过C#编程实现SQL数据库的增删改查。

ado.net提供了丰富的数据库操作,这些操作可以分为三个步骤:

  • 第一,使用SqlConnection对象连接数据库;
  • 第二,建立SqlCommand对象,负责SQL语句的执行和存储过程的调用;(在使用适配器查找记录时不用建立sqlcommand对象)
  • 第三,对SQL或存储过程执行后返回的“结果”进行操作。对结果的操作分为两种,一种为SqlDataReader一行一行读取数据集,另一种为DataSet联合SqlDataAdapter读取数据集。

1.打开连接通道:

        #region 打开连接通道
/// <summary>
///1.连接通道的连接字符串
///2.连接通道对象
///3.打开通道
///4.关闭通道
/// </summary>
public static void OpenConnection()
{
//1.连接通道的连接字符串
string conStr = "server=192.168.1.100;database=JNU;uid=sa;pwd=123456aa;";//指定哪台服务器
//2.连接通道对象
SqlConnection conn = new SqlConnection(conStr);
//3.打开通道
conn.Open();
//4.关闭通道
conn.Close();
Console.WriteLine("连接对象新建操作成功");
}
#endregion

2.增加记录

        #region 增加记录
/// <summary>
/// 增加记录
/// </summary>
public static void AddRecord()
{
int res = -;//准备比接受新增受影响的行数
string conStr = "server=192.168.1.100;database=JNU;uid=sa;pwd=123456aa;";
//1.新建连接通道
SqlConnection conn = new SqlConnection();
//2.手动指定连接字符串
conn.ConnectionString = conStr;
//3.准备新增的sql命令
string sqlStr = "insert into TEST(NAME) values('SHUAI')";
//4.新建命令对象,并且告诉他走那条路(conn),做什么事('sqlStr')单引号一定要加
SqlCommand cmd = new SqlCommand(sqlStr, conn);
//5.打开连接通道
conn.Open();
//6.调用方法去数据库执行sql语句
res = cmd.ExecuteNonQuery();//此方法负责增删改,返回受影响的行数(int),开始进入数据库进行操作
//7.关闭连接通道
conn.Close();
if (res > )
{
Console.WriteLine("新增成功");
}
else
{
Console.WriteLine("新增失败");
}
}
#endregion

3.删除记录和更改记录(软删除)与新增记录的代码相同,只有SQL语句不一样,其SQL语句为

            //3.准备删除的sql命令
string sqlStr = "delete from TEST where ID=8";
//3.准备修改的sql命令
string sqlStr = "update TEST set NAME='qiang' where ID=7";

4.查询单个值时,使用的是命令对象SqlCommand进行查询

        #region 查询单个值
/// <summary>
/// 查询单个值
/// </summary>
public static void QuerySingle()
{
SqlConnection conn = new SqlConnection(conStr);
// string sqlStr = "select count(*) from TEST";
string sqlStr = "select * from TEST";
SqlCommand cmd = new SqlCommand(sqlStr, conn);
conn.Open();
//调用此方法,获得查询语句在数据库执行后得到的结果集的第一个单元格的值,返回类型为object
object obj = cmd.ExecuteScalar();
conn.Close();
Console.WriteLine(obj.ToString()); }
#endregion

5.读取器查询多行数据,逐行读取,通过下标访问数据,还可以通过列名和get方法访问数据

        #region 读取器查询多行数据,逐行读取,通过get方法访问数据
/// <summary>
/// 查询多行数据——DataReader,逐行读取
/// </summary>
public static void QueryListByGet()
{
SqlConnection conn = new SqlConnection(conStr);
string sqlStr = "select * from TEST";
SqlCommand cmd = new SqlCommand(sqlStr, conn);
conn.Open();
//调用此方法,获得一个读取器对象,SqlDataReader不能实例化
SqlDataReader dr = cmd.ExecuteReader();
//if (dr.HasRows)//判断有无数据
//{
// Console.WriteLine("有数据");
//}
//else
//{
// Console.WriteLine("无数据");
//}
if (dr.HasRows)
{
//每调用一次read,读取一行数据
while (dr.Read())//read方法,如果读到下一行数据,则返回true,而且dr本身就等于哪一行数据
{
//读取第一列的数据
//Console.WriteLine(dr[0].ToString());//通过下标访问数据,数组下标从0开始
//Console.WriteLine(dr["ID"].ToString());//通过列名访问数据,以结果集的列名作为标志,可以避免as为别名后的查询错误
Console.WriteLine(dr.GetString());//通过get访问数据,数组下标从0开始,只能用于char类型的变量,不能获取int类型的数据
Console.WriteLine(dr.GetInt32());//只能获取int类型
Console.WriteLine(dr.GetValue().ToString());//以object的方式拿出数据
dr.GetOrdinal("ID");//传入列名,获得列的下标 }
}
else
Console.WriteLine("无数据");
//先关闭读取器,再关闭连接通道
dr.Close();
conn.Close();
}
#endregion

6.适配器查询多行数据

        #region 适配器查询多行数据
/// <summary>
/// 使用适配器读取数据,不需要代码手动打开、关闭连接通道
/// </summary>
public static void QueryListByAdapter()
{
SqlConnection conn = new SqlConnection(conStr);
string sqlStr = "select * from TEST";
//创建适配器对象(SqlDataAdapter),告诉他做什么事(sqlStr),走哪条路(conn)
SqlDataAdapter sqlda = new SqlDataAdapter(sqlStr, conn);
//创建数据集对象(程序端的临时数据库)
DataSet ds = new DataSet();
//调用fill方法,添加数据到数据集。(先去数据库查询结果集,并把结果集返回赋值给数据集)
sqlda.Fill(ds);//开始进入数据库进行操作
DataTable dt = ds.Tables[];//获得数据集中的第一张表(数据集可以存放多张表)
for (int i = ; i < dt.Rows.Count; i++)//循环该表中的每一行,dt.Rows为获取该数据表的行集合
{
DataRow dr = dt.Rows[i];//dr对象获取表中的当前行
Console.WriteLine(dr[].ToString());//通过索引的方式读某一列的值
Console.WriteLine(dr["ID".ToString()]);//通过列名的方式读列
}
}
#endregion

2018.08.12

新手C#SQLServer在程序里实现语句的学习2018.08.12的更多相关文章

  1. (转)新手C#SQL语句的学习2018.08.13

    1.创建数据库(create) CREATE DATABASE database-name 2.删除数据库(drop) drop database dbname 3.备份数据库 --- 创建 备份数据 ...

  2. 新手C#异常的学习2018.08.07

    异常是在程序执行期间出现的问题.C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零. class Program { static void Main(string[] args) ...

  3. 新手C#构造函数、继承、组合的学习2018.08.06/07

    构造函数,是一种特殊的方法.主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中.特别的一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同 ...

  4. 新手C#面向对象的学习2018.08.06

    class Person//声明一个Person类 { //类中的声明与Main中不同,类中声明的是字段而不是函数. public string gender; public string name= ...

  5. 新手C#s.Split(),s.Substring(,)以及读取txt文件中的字符串的学习2018.08.05

    s.split()用于字符串分割,具有多种重载方法,可以通过指定字符或字符串分割原字符串成为字符串数组. //s.Split()用于分割字符串为字符串数组,StringSplitOptions.Rem ...

  6. 新手C#int.Parse、int.TryParse的学习2018.08.04

    int.Parse()用于将字符串转换为32为int类型,但是在遇到非数字或者类似1.545这种小数的时候会报错,后来采用了int.TryParse,这个在转换后会判断是否可以正常转换,若不能,会返回 ...

  7. [转帖]召冠总的 SQLSERVER常用的性能诊断语句. --保存学习备查

    CopyFrom https://www.cnblogs.com/zhaoguan_wang /*常规服务器动态管理对象包括:dm_db_*:数据库和数据库对象dm_exec_*:执行用户代码和关联的 ...

  8. 新手C#类、对象、字段、方法的学习2018.08.05

    类:具有相似属性和方法的对象的集合,如“人”是个类. 对象(实例):对象是具体的看得见摸得着的,如“张三”是“人”这个类的对象.(new Person()开辟了堆空间中,=开辟了栈空间,变量P存放在该 ...

  9. 新手C#string类常用函数的学习2018.08.04

    ToLower()用于将字符串变为小写,注意字符串的不可变特性,需要重新赋值给另一个字符串变量. s = s.ToLower();//字符串具有不可变性,转换后需要重新赋值,不可仅有s.ToLower ...

随机推荐

  1. WCF揭秘学习笔记(4):可信赖会话、会话管理、队列、事务

    可信赖会话 WCF的可信赖会话在绑定层保证消息只会被传输一次,并且保证消息间的顺序.当使用TCP通信时,协议本身保证了可靠性,但它只在两点间的网络 包这个层面提供了这样的保证.WCF的可信赖会话特性保 ...

  2. 背景JS动态网格特性

    将下面代码,粘贴到设置html首页代码即可 <script type="text/javascript"> /** * Copyright (c) 2016 hustc ...

  3. css-深入理解margin和padding

    最近一阶段从新学习了css,发现真的有很多很多的地方都是空白的,今天我们来总结一下margin和padding的一些不为人知的秘密! 一利用float和margin实现布局 我们首先来实现一个两列示布 ...

  4. JAVA Date类与Calendar类【转】

    Date类 在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理.这里简单介绍一下Date ...

  5. [模板] KMP字符串匹配标准代码

    之前借鉴了某个模板的代码.我个人认为这份代码写得很好.值得一背. #include<bits/stdc++.h> using namespace std; const int N=1000 ...

  6. scrapy 抓取拉勾网数据

    其实很简单,却因为一些小问题,折腾不少时间,简要记录一下,以备后需. >> scrapy startproject lagou >> cd lagou >> scr ...

  7. python 文本或句子切割,并保留分隔符

    网上找了好久,都没有理想的解决方法.主要思想,利用正则表达式re.split() 分割,同时利用re.findall() 查找分隔符,而后将二者链接即可. # coding: utf- import ...

  8. CA单向认证和双向认证的区别?

    1:单向认证,内容会被串改吗?

  9. C# implement java like CountDownLatch

    CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier.Semaphore.ConcurrentHashMap和BlockingQueue,它 ...

  10. express处理跨域问题,中间件 CORS

    CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing). 1.不用中间件的话可以这样写: app.all('*', func ...