用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: 数据库基本操作的更多相关文章

  1. ecmall数据库基本操作

    ecmall数据库基本操作,为了认真研究ecmall二次开发,我们必须熟悉ecamll的数据库结构,ecmall数据库结构研究熟悉之后,才能去认真分析ecamll的程序结构.从而实现ecmall二次开 ...

  2. Oracle 数据库基本操作——实用手册、表操作、事务操作、序列

    目录: 0. 参考链接与参考手册1. oracle 实用(常用操作)指令2. 数据库基本操作语法 a) 表操作 1)创建表 2)更新表 3)删除表 4)查询 b) 事务操作 c) 序列操作 1)创建序 ...

  3. MySQL系列:数据库基本操作(1)

    1. 登录数据库 mysql -h localhost -u root -p 2. 数据库基本操作 2.1 查看数据库 mysql> SHOW DATABASES; +------------- ...

  4. MySQL 5.6学习笔记(数据库基本操作,查看和修改表的存储引擎)

    1. 数据库基本操作 1.1  查看数据库 查看数据库列表: mysql> show databases; +--------------------+ | Database | +------ ...

  5. Oracle数据库基本操作(一) —— Oracle数据库体系结构介绍、DDL、DCL、DML

    一.Oracle数据库介绍 1.基本介绍 Oracle数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/ ...

  6. (三)mysql数据库基本操作

    (1)SQL语句:结构化查询语句 DDL语句 数据定义语言:数据库丶表丶视图丶索引丶存储过程丶函数丶create drop alter DML语句 数据库操作语言:插入数据insert,删除数据del ...

  7. laravel基础课程---13、数据库基本操作2(lavarel数据库操作和tp对比)

    laravel基础课程---13.数据库基本操作2(lavarel数据库操作和tp对比) 一.总结 一句话总结: 非常非常接近:也是分为两大类,原生SQL 和 数据库链式操作 学习方法:使用时 多看手 ...

  8. laravel基础课程---10、数据库基本操作(如何使用数据库)

    laravel基础课程---10.数据库基本操作(如何使用数据库) 一.总结 一句话总结: 1.链接数据库:.env环境配置里面 2.执行数据库操作:DB::table('users')->up ...

  9. laravel5.2数据库基本操作

    laravel5.2数据库基本操作 百牛信息技术bainiu.ltd整理发布于博客园 use Illuminate\Database\Eloquent\Model; use Illuminate\Da ...

随机推荐

  1. 后门木马免杀-msfvenom和msf5(evasion)

    贴上使用笔记 不多介绍了 很简单的东西 msfvenom各平台生成木马大全: windows:msfvenom -a x86 --platform Windows -p windows/meterpr ...

  2. [牛客网NOIP赛前集训营-普及组(第二场)]D-合法括号序列

    链接:https://www.nowcoder.com/acm/contest/165/D来源:牛客网 合法括号序列 键盘上有左括号(,右括号),和退格键-,共三个键. 牛牛希望按键n次,使得输入的字 ...

  3. MyBatis 开发手册

    这一遍看Mybatis的原因是怀念一下去年的 10月24号我写自己第一个项目时使用全配置文件版本的MyBatis,那时我们三个人刚刚大二,说实话,当时还是觉得MyBatis挺难玩的,但是今年再看最新版 ...

  4. 利用git工具将自己的代码文件上传到Github

    GitHub 是一个面向开源及私有软件项目的托管平台,作为开源代码库以及版本控制系统,Github拥有超过900万开发者用户.随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及 ...

  5. 11.Nginx架构进阶

    1.如何将LNMP拆分为LNP+MySQL 1.备份172.16.1.7上的数据库信息 [root@web01 ~]# mysqldump -uroot -p'000000' --all-databa ...

  6. 解析fiddler返回的部分数据。

    1.通过抓包获取的数据,里面包含的哪些内容是需要我们去关注的? 2.首先上图. 3.图片说明: 此图片中是利用豆瓣API提供的接口实现返回数据.内容与抓包返回的内容格式一致 url:https://a ...

  7. 手绘风格的 JS 图表库:Chart.xkcd

    本文作者:HelloGitHub-kalifun 图表库千万个今天 HelloGitHub 给大家推荐个很有"特色"的图表库:一个手绘风格的 JS 图表库 -- Chart.xkc ...

  8. The usage of Markdown---链接的使用

    目录 1. 序言 2. 网页链接 3. 图片链接 4. 页内跳转 更新时间:2019.09.14 1. 序言   在编辑文章的时候,我们常常需要插入各种链接,比如说网页链接,图片链接等等.当文章篇幅过 ...

  9. quartus使用串口IP模块

    在quartus平台中使用串口模块的IP,需要使用到platform designer软件来实现. 1.在quartus界面调出IP Catalog界面. 2.在IP catalog中搜索UART,找 ...

  10. 如何理解swift中的delegate

    Delegation翻译为代理或者委托,是一种设计模式.顾名思义,使class或struct能够将某些职责移交给其他类型的实例. 该设计模式通过定义一个封装(包含)delegate的protocol( ...