原来一直是java,python等语言,最近用c#语言,并编写数据库访问代码。使用了之后,这里总结下,分享下c#如何操作数据库。

在java等其它语言中,有一套标准的api来完成数据库访问,并且一般都是通过sql语句来访问的。而在c#中,提供了多种灵活的方式。

大致可以分为:

1)和其它语言一样,直接利用sql命令(包括存储过程)操作数据库

2)利用sql语句,同时结合DataSet、DataAdapter等Api,提高使用的效率

3)与gui程序结合,与DataGridView等可视化组件结合。

本文介绍第一种方式。对于第一种方式,主要分为更新语句和查询语句,需要考虑的有:

1)单条和批量更新语句的执行

2)参数绑定

3)事务处理

.........

下面我们按照常用的使用场景一 一来介绍。

一、更新操作(单条语句)

直接上代码

using System;
using System.Data;
using System.Data.SqlClient; namespace DbExample
{
class DbActor
{
public void updateDb()
{
SqlConnection conn = getConnection();
try
{
conn.Open();
SqlCommand command = new SqlCommand("insert userinfo values('aaa','bb')", conn);
int re = command.ExecuteNonQuery();
if (re == )
{
System.Console.WriteLine("inset success");
}
else
{
System.Console.WriteLine("inset error");
}
}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
}
finally
{
conn.Close();
}
} private SqlConnection getConnection()
{
string strConnection = @"Data Source = localhost\SQLEXPRESS; Initial Catalog = mydb; User Id = sa; Password = 12345678;";
SqlConnection conn = new SqlConnection(strConnection);
return conn;
}
}
}

需要注意几点:
1)数据库链接是资源,使用完需要释放。这在所有其它语言的数据库访问中都是这样的。

2)c#比较讨厌的是,它针对不同的数据库,有不同的数据访问对象(类名不同,所在的命名空间不同),这里的api都是Sqlxxxxx,以Sql打头的api是访问sql server数据库的api。这点在使用时需要注意。

3)ExecuteNonQuery 方法的返回值是执行sql命令后影响的记录的条数。

二、参数绑定

执行sql命令,最基本的就是拼凑一个完整的sql语句执行。但更常用的做法是进行参数传递的方式,这样可以有效利用数据库的特性,提高同类sql语句(sql命令一样,只是命令的值不同)的执行效率。举例代码如下:

 public void updateDbByPara()
{
SqlConnection conn = getConnection();
try
{
conn.Open();
SqlCommand command = new SqlCommand("insert userinfo values(@name,@pass)", conn);
command.Parameters.Add(new SqlParameter("@name","x1"));
command.Parameters.Add(new SqlParameter("@pass", ""));
command.ExecuteNonQuery();
}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
}
finally
{
conn.Close();
}
}

注意:sql语句中的  @参数名  不能用引号括起来,否则就当作字符串值了。

三、事务

当同时执行多条dml语句时,需要考虑在一个事务中执行。下面给出一个例子:

public void updateDbByTrans()
{
SqlConnection conn = getConnection();
SqlTransaction trans = null;
try
{
conn.Open();
trans = conn.BeginTransaction();
SqlCommand command = new SqlCommand("insert userinfo values(@name,@pass)", conn,trans);
command.Parameters.Add(new SqlParameter("@name", "x5"));
command.Parameters.Add(new SqlParameter("@pass", ""));
command.ExecuteNonQuery(); command.Parameters.Clear();
command.Parameters.Add(new SqlParameter("@name", "x4"));
command.Parameters.Add(new SqlParameter("@pass", ""));
command.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
try
{
trans.Rollback();
}
catch { }
}
finally
{
conn.Close();
}
}

上面执行了两个sql语句,如果第一个语句成功,但第2个语句失败,因为在一个事务中,第一个语句也不会生效。

 本文介绍了如何直接利用sql语句进行数据库的更新操作,下面的文章会接着进行数据库查询等操作的介绍。

最新文章

  1. 基于 Hive 的文件格式:RCFile 简介及其应用
  2. 敏捷开发Scrum
  3. JAVA求集合中的组合
  4. [USACO 2010 OPEN]SLIED
  5. 【关于服务器端SQL Server 2008的设置】 使其他客户端机可通过ODBC数据源可访问
  6. 动态的计算行高 加载数据源 有多少显示多少 tableView 包含 colloctionView 显示复杂的界面写法
  7. DButils实现查询和新增
  8. PostgreSQL增删数据命令示例
  9. 大数据工具——Splunk
  10. MySQL事务之数据结构
  11. WinForm(C#)自定义控件之——RoundButton(圆形按钮)
  12. POJ 1743 Musical Theme(不可重叠最长重复子串)
  13. HDU 2023题解分析
  14. C语言之辗转相除法
  15. VS2012 创建项目失败,,提示为找到约束。。。。
  16. I2C操作笔记——以 AT24C04为例
  17. MVVM命令绑定原理
  18. Java基础---基础加强---增强for循环、自动拆装箱及享元、枚举的作用、实现带有构造方法、透彻分析反射的基础_Class类、成员变量的反射、数组参数的成员方法进行反射、数组的反射应用
  19. ITU-T Technical Paper: QoS 测量 (目标,方法,协议)
  20. CentOS 安装最新版本 Git

热门文章

  1. MacOS下使用VMware5 破解 安装win7 ISO 激活
  2. CI引入外部javascript和css
  3. 中国天气网API
  4. ajax不执行success回调而是执行了error回调
  5. ajax的简单操作
  6. for语句及switch case用法示例
  7. linq to sql用partial扩展属性,创建一个部分类(用于多表连接)
  8. VC++6.0打开文件出错的解决办法
  9. [译]Stairway to Integration Services Level 5 - 增量删除数据
  10. this class is not key value coding-compliant for the key detailItem