C# III: 数据库基本操作
用C#操作数据库——数据库使用SQL Server为例,对应的namespace是System.Data.SqlClient.
- 读取数据
从数据库中读取数据是最基本的操作了。
示例代码如下:
String connString = @""; // Connection string
SqlConnection conn = new SqlConnection(connString);
try
{
String queryString = @"SELECT [ID], [NAME] FROM dbo.TABLE1;";
conn.Open();
SqlCommand cmd = new SqlCommand(queryString, conn);
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
Console.Write(reader.GetInt32(0)); // ID
Console.Write(reader.GetString(1)); // Name
}
}
catch(Exception exp)
{
System.Diagnostics.Debug.WriteLine(exp.Message);
}
finally
{
conn.Close();
conn.Dispose();
}
- 写入数据
与读取数据旗鼓相当的支柱型操作就是写入了。
一个简单的写入示例(这里使用了一个await操作以达到异步的效果):
String connString = @""; // Connection string
SqlConnection conn = new SqlConnection(connString);
try
{
String queryString = @"INSERT INTO dbo.TABLE1 ([ID], [Name]) VALUES(1, 'Test')";
conn.Open();
SqlCommand cmd = new SqlCommand(queryString, conn);
try
{
Int32 nRst = await cmd.ExecuteNonQueryAsync();
}
catch(Exception exp)
{
System.Diagnostics.Debug.WriteLine(exp.Message);
}
}
catch (Exception exp)
{
System.Diagnostics.Debug.WriteLine(exp.Message);
}
finally
{
conn.Close();
conn.Dispose();
}
- Transaction支持
同时写入多个有关联的表时,就需要transaction的支持了。
一个示例如下:
String connString = @""; // Connection string
SqlConnection conn = new SqlConnection(connString);
try
{
conn.Open();
SqlTransaction trans = conn.BeginTransaction();
try
{
String queryString = @"INSERT INTO dbo.TABLE1 ([ID], [Name]) VALUES(1, 'Test')";
SqlCommand cmd = new SqlCommand(queryString, conn);
cmd.Transaction = trans;
Int32 nRst = await cmd.ExecuteNonQueryAsync();
queryString2 = @"INSERT INTO dbo.TABLE2 ([ID], [Name]) VALUES(2, 'Test2')";
cmd = new SqlCommand(queryString2, conn);
cmd.Transaction = trans;
nRst = await cmd.ExecuteNonQueryAsync();
trans.Commit();
}
catch(Exception exp)
{
System.Diagnostics.Debug.WriteLine(exp.Message);
trans.Rollback();
}
}
catch (Exception exp)
{
System.Diagnostics.Debug.WriteLine(exp.Message);
}
finally
{
conn.Close();
conn.Dispose();
}
- 参数支持
上述的代码片中,插入数据库中的是固定文本。而现实生活中,插入数据库绝大多数是变量——比如用户输入的内容,这时就需要用到参数。
String connString = @""; // Connection string
SqlConnection conn = new SqlConnection(connString);
try
{
String queryString = @"INSERT INTO dbo.TABLE1 ([ID], [Name]) VALUES(@id, @name)";
conn.Open();
SqlCommand cmd = new SqlCommand(queryString, conn);
cmd.Parameters.AddWithValue( "@id" , 3);
cmd.Parameters.AddWithValue( "@name" , 'Test');
try
{
Int32 nRst = await cmd.ExecuteNonQueryAsync();
}
catch(Exception exp)
{
System.Diagnostics.Debug.WriteLine(exp.Message);
}
}
catch (Exception exp)
{
System.Diagnostics.Debug.WriteLine(exp.Message);
}
finally
{
conn.Close();
conn.Dispose();
}
- Identity Value的获取
另外一个经常碰到的问题是,当table中一个Column设置为identity时候,需要取出刚insert成功的数据所获得的ID。
String connString = @""; // Connection string
SqlConnection conn = new SqlConnection(connString);
try
{
// ID is set to identity
String queryString = @"INSERT INTO dbo.TABLE1 ([Name]) VALUES(@name); SELECT @Identity = SCOPE_IDENTITY();";
conn.Open();
SqlCommand cmd = new SqlCommand(queryString, conn);
cmd.Parameters.AddWithValue( "@name" , 'Test');
SqlParameter idparam = cmd.Parameters.AddWithValue("@Identity", SqlDbType.Int);
idparam.Direction = ParameterDirection.Output;
try
{
Int32 nRst = await cmd.ExecuteNonQueryAsync();
Int32 newID = (Int32)idparam.Value;
}
catch(Exception exp)
{
System.Diagnostics.Debug.WriteLine(exp.Message);
}
}
catch (Exception exp)
{
System.Diagnostics.Debug.WriteLine(exp.Message);
}
finally
{
conn.Close();
conn.Dispose();
}
是为之记。
Alva Chien
2016.6.29
C# III: 数据库基本操作的更多相关文章
- ecmall数据库基本操作
ecmall数据库基本操作,为了认真研究ecmall二次开发,我们必须熟悉ecamll的数据库结构,ecmall数据库结构研究熟悉之后,才能去认真分析ecamll的程序结构.从而实现ecmall二次开 ...
- Oracle 数据库基本操作——实用手册、表操作、事务操作、序列
目录: 0. 参考链接与参考手册1. oracle 实用(常用操作)指令2. 数据库基本操作语法 a) 表操作 1)创建表 2)更新表 3)删除表 4)查询 b) 事务操作 c) 序列操作 1)创建序 ...
- MySQL系列:数据库基本操作(1)
1. 登录数据库 mysql -h localhost -u root -p 2. 数据库基本操作 2.1 查看数据库 mysql> SHOW DATABASES; +------------- ...
- MySQL 5.6学习笔记(数据库基本操作,查看和修改表的存储引擎)
1. 数据库基本操作 1.1 查看数据库 查看数据库列表: mysql> show databases; +--------------------+ | Database | +------ ...
- Oracle数据库基本操作(一) —— Oracle数据库体系结构介绍、DDL、DCL、DML
一.Oracle数据库介绍 1.基本介绍 Oracle数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/ ...
- (三)mysql数据库基本操作
(1)SQL语句:结构化查询语句 DDL语句 数据定义语言:数据库丶表丶视图丶索引丶存储过程丶函数丶create drop alter DML语句 数据库操作语言:插入数据insert,删除数据del ...
- laravel基础课程---13、数据库基本操作2(lavarel数据库操作和tp对比)
laravel基础课程---13.数据库基本操作2(lavarel数据库操作和tp对比) 一.总结 一句话总结: 非常非常接近:也是分为两大类,原生SQL 和 数据库链式操作 学习方法:使用时 多看手 ...
- laravel基础课程---10、数据库基本操作(如何使用数据库)
laravel基础课程---10.数据库基本操作(如何使用数据库) 一.总结 一句话总结: 1.链接数据库:.env环境配置里面 2.执行数据库操作:DB::table('users')->up ...
- laravel5.2数据库基本操作
laravel5.2数据库基本操作 百牛信息技术bainiu.ltd整理发布于博客园 use Illuminate\Database\Eloquent\Model; use Illuminate\Da ...
随机推荐
- Linux之常用命令II
一.VI编辑器 1) 概述 ◆ Visual Interface(可视化接口): ◆ 类似Windows中的记事本,比记事本强大: ◆ VIM相对于VI做了哪些提升 -VIM支持多级撤销 -VI ...
- PMBOK(第六版) PMP笔记——《十一》第十一章(项目风险管理)
PMBOK(第六版) PMP笔记——<十一>第十一章(项目风险管理) 第十一章 风险管理: 项目的独特性导致项目充满风险,项目风险是一种不确定的事件或条件,可能发生.将 要发生,也可能不发 ...
- Linux power supply class(1)_软件架构及API汇整【转】
1. 前言 power supply class为编写供电设备(power supply,后面简称PSY)的驱动提供了统一的框架,功能包括: 1)抽象PSY设备的共性,向用户空间提供统一的API. 2 ...
- SpringBoot中如何优雅的读取yml配置文件?
YAML是一种简洁的非标记语言,以数据为中心,使用空白.缩进.分行组织数据,从而使得表示更加简洁易读.本文介绍下YAML的语法和SpringBoot读取该类型配置文件的过程. 本文目录 一.YAML基 ...
- 别说家庭组开不了,一定成功的方法|win7家庭组无法开启|win7如何共享打印机
两台WIN7要开启家庭组并且共享打印机 这两台电脑必须打开以下服务:dnscache(任务管理器 简写).fdrespub(任务管理器 简写).(接下来下了都是服务里面的)SSDP Discovery ...
- 数据结构(四十二)散列表查找(Hash Table)
一.散列表查找的基础知识 1.散列表查找的定义 散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key).查找时,根据这个确定的对应关系找到 ...
- vue路由安装
1.安装路由: vue ui cnpm install vue-router 2.使用,导入: 默认创建项目的时候就已经帮你写好了. import router from "vue-rout ...
- MybatisPlus3.X使用配置
本文讲解了MyBatis-Plus在使用过程中的配置选项,其中,部分配置继承自MyBatis原生所支持的配置 基本配置 本部分配置包含了大部分用户的常用配置,其中一部分为 MyBatis 原生所支持的 ...
- redis is configured to save RDB snapshots
Redis被配置为保存数据库快照,但它目前不能持久化到硬盘.用来修改集合数据的命令不能用 原因: 强制关闭Redis 快照导致不能持久化. 解决方法: 运行 config set stop-write ...
- Nexus 离线更新中央仓库索引
nexus可以在线更新中央仓库索引,但是更新速度慢,而且很有可能下载的索引不全.下面介绍一种离线更新中央仓库索引的方式,速度快并且可靠. 1.访问http://repo.maven.apache.or ...