SQL Server知识点回忆篇(三):ADO.NET之C#操作数据库

1.连接数据库

  (1)创建连接字符串:

  使用windows身份验证时的连接字符串:

private string conStr="Data Source=MyTestDB;Initial Catalog=tbUsers;Integrated Security=True";

  使用用户名和密码时的连接字符串:

private string conStr="Data Source=MyTestDB;Initial Catalog=tbUsers;uid=sa;pwd=test";

  (2)创建连接对象:

SqlConnection con=new SqlConnection(Constr);

  (3)打开连接:

con.Open();

  (4)关闭连接,释放资源:

      强烈建议在使用完连接时一定要关闭连接,以便连接可以返回到ADO.NET连接池中。

con.Close();
con.Dispose();

2.  连接数据库执行sql语句 -- ExecuteNonQuery()的使用

  .NET Framework 提供的 SqlCommand 对象,用于执行SQL语句。

  调用ExecuteNonQuery()方法执行sql语句,返回一个 int 类型的数据,值是影响的行数,在使用insert,update, delete语句时可调用该方法执行sq语句。

public static int ExeNoQuery(string sql)
{
using (SqlConnection con=new SqlConnection(Constr))
{
using (SqlCommand cmd=new SqlCommand(sql,con))
{
con.Open();
return cmd.ExecuteNonQuery();
}
}
}

3.  连接数据库执行sql语句 -- ExecuteScalar()的使用

  调用 ExecuteScalar() 方法执行sql语句,返回一个 object 类型的数据,值是执行sql语句的结果,在使用聚合函数时可调用该方法执行sq语句。

public static object ExeScalar(string sql)
{
using (SqlConnection con = new SqlConnection(Constr))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
con.Open();
return cmd.ExecuteScalar();
}
}
}

4.  连接数据库执行sql语句 -- ExecuteReader()的使用

  使用ExecuteReader()方法执行sql语句,返回值为SqlDataReader类型,可以从返回的SqlDataReader中一条一条取数据,该方法用于查询多行多列结果时。

  SqlDataReader只读取数据,只能前进不能后退。使用SqlDataReader时必须保证连接是打开状态。

  SqlDataReader使用完毕后,要把SqlDataReader关闭,释放。

public static SqlDataReader ExeReader(string sql)
{
SqlConnection con = new SqlConnection(Constr);
SqlCommand cmd = new SqlCommand(sql, con); con.Open();
SqlDataReader reder = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return reder;
}

5. 连接数据库执行sql语句 -- SqlDataAdapter的使用

  使用SqlDataAdapter,可以将查询的结果填充在datatable中返回。

public static DataTable ExeAdapter(string sql)
{
using (SqlConnection con =new SqlConnection(Constr))
{
using (SqlCommand cmd = new SqlCommand(sql,con))
{using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
DataTable dt = new DataTable();
con.Open();
da.Fill(dt);
return dt;
}
}
}
}

6. 使用带参数的 sql 语句

  为了安全的使用sql语句,防止sql注入,请不要直接使用用户输入的值来拼接sql语句,应使用参数的方式将值传入sql语句执行。

  带参数的sql语句:

string strsql = "insert into tbUsers(UserName,Age,Email,DepartmentID) values(@uName,@uAge,@uEmail,@uDeptID)";
SqlParameter[] ps = new SqlParameter[] {
new SqlParameter("@uName",SqlDbType.VarChar) {Value="小明"},
new SqlParameter("@uAge",SqlDbType.Int) {Value= },
new SqlParameter("@uEmail",SqlDbType.VarChar) {Value="xiaoming@qq.com" },
new SqlParameter("@uDeptID",SqlDbType.VarChar) {Value="" } }; int iRow = ExeNoQuery(strsql, ps); if (iRow>)
{
Console.WriteLine("影响的行数:{0}",iRow);
} Console.ReadKey();

  执行带参数的sql语句:

 public static int ExeNoQuery(string sql, SqlParameter[] para)
{
using (SqlConnection con = new SqlConnection(Constr))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
if (para != null)
{
cmd.Parameters.AddRange(para);
}
con.Open();
return cmd.ExecuteNonQuery();
}
}
}

7. ADO.NET连接池

  (1) 连接池使新连接必须打开的次数得以减少。

  (2) 启用ADO.NET连接池后,创建一个连接对象,不会立刻关闭。后面的其他连接对象可以直接使用。

  (3) 连接池中的对象过一段时间没有被访问会自动销毁。(如果空闲时间达到大约 4-8 分钟,或池进程检测到与服务器的连接已断开,连接池进程会将该连接从池中移除。)

  (4) 默认情况下,在 ADO.NET 中连接池是启用的。

SQL Server -- 回忆笔记(三):ADO.NET之C#操作数据库的更多相关文章

  1. SQL Server -- 回忆笔记(五):T-SQL编程,系统变量,事务,游标,触发器

    SQL Server -- 回忆笔记(五):T-SQL编程,系统变量,事务,游标,触发器 1. T-SQL编程 (1)声明变量 declare @age int (2)为变量赋值 (3)while循环 ...

  2. SQL Server -- 回忆笔记(四):case函数,索引,子查询,分页查询,视图,存储过程

    SQL Server知识点回忆篇(四):case函数,索引,子查询,分页查询,视图,存储过程 1. CASE函数(相当于C#中的Switch) then '未成年人' else '成年人' end f ...

  3. SQL Server -- 回忆笔记(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询

    SQL Server知识点回忆篇(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询 1. insert 如果sql server设置的排序规则不是简体中文,必须在简体中文字符串前加N, ...

  4. SQL Server -- 回忆笔记(一):初见数据库

    SQL Server知识点回忆篇(一):初见数据库 1.  主键 primary key    唯一标识, 不会重复的值才会用来当做主键使用. 表可以没有主键,但建议每张表都有主键. 2.  数据冗余 ...

  5. Microsoft SQL Server Compact 4.0&&ADO.NET Entity Framework 4.1&&MVC3

    最近重新查看微软MvcMusicStore-v3.0的源代码,发现忽略了很多重要的东西,特别是数据访问那一部分. 首先Microsoft SQL Server Compact 4.0 详细的介绍和下载 ...

  6. 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...

  7. SQL Server中的三种Join方式

      1.测试数据准备 参考:Sql Server中的表访问方式Table Scan, Index Scan, Index Seek 这篇博客中的实验数据准备.这两篇博客使用了相同的实验数据. 2.SQ ...

  8. 【SQL Server学习笔记】Delete 语句、Output 子句、Merge语句

    原文:[SQL Server学习笔记]Delete 语句.Output 子句.Merge语句 DELETE语句 --建表 select * into distribution from sys.obj ...

  9. Sql Server之使用T_SQL创建,修改,查看数据库信息

    一.使用Transact_SQL创建数据库 Transact_SQL语法如下:  create database database_name   [ on     [primary]  [<fi ...

随机推荐

  1. 95%的技术面试必考的JVM知识点都在这,另附加分思路!

    概述:知识点汇总 jvm的知识点汇总共6个大方向:内存模型.类加载机制.GC垃圾回收是比较重点的内容.性能调优部分偏重实际应用,重点突出实践能力.编译器优化和执行模式部分偏重理论基础,主要掌握知识点. ...

  2. php内核一些常识

    整个PHP环境和Zend环境会涉及多个全局变量,下面是几个比较重要的: php_core_globals core_globals(main/php_globals.h) ==> PG PHP调 ...

  3. RSA算法原理——(2)RSA简介及基础数论知识

    上期为大家介绍了目前常见加密算法,相信阅读过的同学们对目前的加密算法也算是有了一个大概的了解.如果你对这些解密算法概念及特点还不是很清晰的话,昌昌非常推荐大家可以看看HTTPS的加密通信原理,因为HT ...

  4. 设置radio选中

    选中: $('.viewradio:input[name="istop"][value="' + getSelected().istop + '"]').pro ...

  5. 【朝花夕拾】Android性能篇之(三)Java内存回收

    在上一篇日志([朝花夕拾]Android性能篇之(二)Java内存分配)中有讲到,JVM内存由程序计数器.虚拟机栈.本地方法栈.GC堆,方法区五个部分组成.其中GC堆是一块多线程的共享区域,它存在的作 ...

  6. Android软键盘事件imeOptions响应

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 在android发开过程中,有时候需要对EditText的软键盘进行监听. 当点击软键盘回车位置按键的时候,需要实现 完成.前进.下 ...

  7. Why DDD and layered architecture

    As a developer, you may think that your job is to write code. However, Software development is not a ...

  8. leetcode — sum-root-to-leaf-numbers

    import java.util.Stack; /** * * Source : https://oj.leetcode.com/problems/sum-root-to-leaf-numbers/ ...

  9. 我和Session的不解之“缘”(故事型技术长文)

    本文讲述了一路走来对Session的认知.文章有点长,不过是故事型的,应该不枯燥.相信读完也一定会有所收获. (一) “当你登陆系统后,服务器会创建一个Session,保存你的登陆信息,下次再访问时就 ...

  10. [五]类加载机制双亲委派机制 底层代码实现原理 源码分析 java类加载双亲委派机制是如何实现的

      Launcher启动类 本文是双亲委派机制的源码分析部分,类加载机制中的双亲委派模型对于jvm的稳定运行是非常重要的 不过源码其实比较简单,接下来简单介绍一下   我们先从启动类说起 有一个Lau ...