连接类 连接类有固定的使用模式,这是常用的乐观模式: using (var conn = new SqlConnection(connstr)){conn.Open();//执行各种数据库操作} 悲观的、防御性的编程方式,这里在using语句结尾显示关闭了连接,并捕捉整个using语句的数据库异常: try{using (v
连接类
连接类有固定的使用模式,这是常用的乐观模式:
using (var conn = new SqlConnection(connstr)) { conn.Open(); //执行各种数据库操作 }悲观的、防御性的编程方式,这里在using语句结尾显示关闭了连接,并捕捉整个using语句的数据库异常:
try { using (var conn = new SqlConnection(connstr)) { conn.Open(); //执行各种数据库操作 conn.Close(); } } catch (SqlException e) { throw; } 事务当使用多条语句修改数据库是,应将所有这些语句看作一个单元,要么完全成功修改数据库(提交),香港空间,要么完全失败任何一条修改语句都不会被执行(回滚)。要想使用事务,先要引用System.Transactions装配体。事务的代码如下所示:
using (var scope = new TransactionScope()) { using (var conn = new SqlConnection(connstr)) { conn.Open(); // 执行各种数据库操作 } scope.Complete(); }在这里,事务范围使用了默认构造函数,它意味着TransactionScopeOption.Required、IsolationLevel.Serializable、TimeOut=1分钟。
事务通过使用scope.Complete显式标记为完成。缺少这个调用,事务将被回滚。
事务范围内可以有多个连接,都被看作一个整体。
事务的隔离级别:
ReadCommitted 读取已经提交的数据
ReadUncommitted 读取还没有提交的数据
RepeatableRead
Serializable
命令打开数据库连接之后,需要定义要执行的命令。对Sql Server可用的命令类型有两种:文本、和存储过程。
定义文本类型命令的方法如下。因为文本类型的命令是默认值,虚拟主机,所以不需要显式指定命令类型:
var sql = "SELECT ContactName FROM Customers"; var cmd = new SqlCommand(sql, conn);定义存储过程类型的命令:
var cmd = new SqlCommand("CustOrderHist", conn) { CommandType = CommandType.StoredProcedure }; cmd.Parameters.AddWithValue("@CustomerID", "QUICK"); 执行命令定义了命令之后,需要执行它。根据返回结果不同分成三种执行方法。
ExecuteNonQuery方法一般用于UPDATE,INSERT,或DELETE语句。它执行命令,并返回受影响的行数。
打开连接后,添加如下代码:
var cmd = new SqlCommand("CustOrderHist", conn) { CommandType = CommandType.StoredProcedure }; cmd.Parameters.AddWithValue("@CustomerID", "QUICK"); var rows = cmd.ExecuteNonQuery();ExecuteReader方法执行命令,并返回一个数据阅读器对象。在打开连接语句之后,添加如下代码:
var sql = "SELECT ContactName,CompanyName FROM Customers"; var cmd = new SqlCommand(sql, conn); var reader = cmd.ExecuteReader(); while (reader.Read()) { Console.WriteLine("Contact: {0,-20} Company: {1}", reader[0], reader[1]); }ExecuteScalar执行返回一个标量值的命令。在打开连接语句之后,添加如下代码:
var sql = "SELECT COUNT(*) FROM Customers"; var cmd = new SqlCommand(sql, conn); var custs = (int)cmd.ExecuteScalar(); Console.WriteLine(custs);ExecuteScalar方法返回一个object对象,需要将其转化为实际的类型。
调用存储过程 调用不返回值的存储过程这里列出两个例子,使用了Northwind数据库的Region表。
更新记录存储过程定义如下:
CREATE PROCEDURE RegionUpdate (@RegionID INTEGER, @RegionDescription NCHAR(50)) AS SET NOCOUNT OFF UPDATE Region SET RegionDescription = @RegionDescription WHERE RegionID = @RegionID GO如前所述,定义一个命令,并添加他的参数和参数值:
var cmd = new SqlCommand("RegionUpdate", conn) { CommandType = CommandType.StoredProcedure }; cmd.Parameters.AddWithValue("@RegionID", 23); cmd.Parameters.AddWithValue("@RegionDescription", "Something"); cmd.ExecuteNonQuery(); 删除记录存储过程定义如下:
CREATE PROCEDURE RegionDelete (@RegionID INTEGER) AS SET NOCOUNT OFF DELETE FROM Region WHERE RegionID = @RegionID GO在命令定义部分,使用SqlParameter构造函数来构造命令参数:
var cmd = new SqlCommand("RegionDelete", conn) { CommandType = CommandType.StoredProcedure }; cmd.Parameters.Add(new SqlParameter("@RegionID", SqlDbType.Int, 0, "RegionID")); cmd.UpdatedRowSource = UpdateRowSource.None;构造完命令并添加参数定义之后,通过参数名字检索出参数并设置它的值,然后执行命令:
cmd.Parameters["@RegionID"].Value = 999; cmd.ExecuteNonQuery();也可以通过参数位置检索参数。
调用返回输出参数的存储过程下面的例子演示插入一个记录到数据库并且返回该记录的主键给调用者。
CREATE PROCEDURE RegionInsert(@RegionDescription NCHAR(50), @RegionID INTEGER OUTPUT)AS SET NOCOUNT OFF SELECT @RegionID = MAX(RegionID)+ 1 FROM Region INSERT INTO Region(RegionID, RegionDescription) VALUES(@RegionID, @RegionDescription) GO插入过程创造一个新的Region记录。因为主键由数据库自己生成,这值被作为一个输出参数从过程(@RegionID)返回。下面代码显示我们将如何调用RegionInsert存储过程:
var cmd = new SqlCommand("RegionInsert", conn) { CommandType = CommandType.StoredProcedure }; cmd.Parameters.Add(new SqlParameter("@RegionDescription", SqlDbType.NChar, 50, "RegionDescription")); cmd.Parameters.Add(new SqlParameter("@RegionID", SqlDbType.Int, 0, ParameterDirection.Output, false, 0, 0, "RegionID", DataRowVersion.Default, null)); cmd.UpdatedRowSource = UpdateRowSource.OutputParameters;第二参数,@RegionID,香港服务器,包括它的参数方向,在这个例子中是Output。代码的最后一行UpdateRowSource枚举被用来指明数据将从这个存储过程通过输出参数返回。

如何在PHP后端功能开发中合理应用设计模式?设计模式是一种经过实践证明的解决特定问题的方案模板,可以用于构建可复用的代码,在开发过程中提高可维护性和可扩展性。在PHP后端功能开发中,合理应用设计模式可以帮助我们更好地组织和管理代码,提高代码质量和开发效率。本文将介绍常用的设计模式,并给出相应的PHP代码示例。单例模式(Singleton)单例模式适用于需要保

如何通过编写代码来学习和运用PHP8的设计模式设计模式是软件开发中常用的解决问题的方法论,它可以提高代码的可扩展性、可维护性和重用性。而PHP8作为最新版的PHP语言,也引入了许多新特性和改进,提供更多的工具和功能来支持设计模式的实现。本文将介绍一些常见的设计模式,并通过编写代码来演示在PHP8中如何运用这些设计模式。让我们开始吧!一、单例模式(Sing

本篇文章给大家带来了关于golang设计模式的相关知识,其中主要介绍了职责链模式是什么及其作用价值,还有职责链Go代码的具体实现方法,下面一起来看一下,希望对需要的朋友有所帮助。

随着数据的增长和复杂性的不断提升,ETL(Extract、Transform、Load)已成为数据处理中的重要环节。而Go语言作为一门高效、轻量的编程语言,越来越受到人们的热捧。本文将介绍Go语言中常用的ETL设计模式,以帮助读者更好地进行数据处理。一、Extractor设计模式Extractor是指从源数据中提取数据的组件,常见的有文件读取、数据库读取、A

单例模式是一种常见的设计模式,它在系统中仅允许创建一个实例来控制对某些资源的访问。在 Go 语言中,实现单例模式有多种方式,本篇文章将带你深入掌握 Go 语言中的单例模式实现。

设计模式的六大原则:1、单一职责原则,其核心就是控制类的粒度大小、将对象解耦、提高其内聚性;2、开闭原则,可以通过“抽象约束、封装变化”来实现;3、里氏替换原则,主要阐述了有关继承的一些原则;4、依赖倒置原则,降低了客户与实现模块之间的耦合;5、接口隔离原则,是为了约束接口、降低类对接口的依赖性;6、迪米特法则,要求限制软件实体之间通信的宽度和深度。

随着JavaScript的不断发展和应用范围的扩大,越来越多的开发人员开始意识到设计模式和最佳实践的重要性。设计模式是一种被证明在某些情况下有用的软件设计解决方案。而最佳实践则是指在编程过程中,我们可以应用的一些最佳的规范和方法。在本文中,我们将探讨JavaScript中的设计模式和最佳实践,并提供一些具体的代码示例。让我们开始吧!一、JavaScript中

在C#开发中,设计模式和架构选择是至关重要的。良好的设计模式和合适的架构选择可以大大提高软件的可维护性、扩展性和性能。本文将讨论一些在C#开发中常用的设计模式和架构选择,并给出一些建议。设计模式是解决特定问题的通用解决方案,它们可以帮助开发人员避免重复造轮子,提高代码的可重用性和可读性。在C#开发中,有许多常用的设计模式,如单例模式、工厂模式、观察者模式等。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),
