用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

最新文章

  1. 微信小程序监控 - HotApp统计
  2. Flume NG Getting Started(Flume NG 新手入门指南)
  3. @Async in Spring--转
  4. 正则表达式解析URL
  5. PHP保留2位小数 格式化小数、浮点数
  6. [1]开发准备-使用C#.NET开发基于本地数据缓存的PC客户端
  7. VC++ AfxBeginThread 与 CreateThread 的区别
  8. JS-定时器管理实例函数封装
  9. python datetime模块用strftime 格式化时间
  10. JDK,JRE,JVM区别与联系
  11. sql server经典sql
  12. 如何把iOS代码编译为Android应用
  13. jq分页插件,支持动态,静态分页的插件,简单易用。
  14. 实践作业2:黑盒测试实践——安装配置测试工具 Day 3
  15. 《java入门第一季》正则表达式小案例
  16. go并发调度原理学习
  17. PHP content-type为"application/json"的post过来的数据$_POST接受不到的问题
  18. kubernetes promethues预警、报警
  19. Scaleform Gfx的Demo
  20. Android开发艺术探索学习笔记(四)

热门文章

  1. Docker 学习入门
  2. django数据库迁移时候异常
  3. java中的静态
  4. 【RabbitMQ 实战指南】一 过期时间TTL
  5. Vulnhub靶场渗透练习(二) Billu_b0x
  6. 坚果云Markdown - 文档管理编辑器
  7. 浅谈K-means聚类算法
  8. Java中常用的四种线程池
  9. 百万年薪python之路 -- 生成器
  10. 不离开Emacs完成简单程序的编辑编译运行(windows或Linux)