c# 数据库编程(通过SqlCommand 执行DML语句)
原来一直是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语句进行数据库的更新操作,下面的文章会接着进行数据库查询等操作的介绍。
c# 数据库编程(通过SqlCommand 执行DML语句)的更多相关文章
- JDBC基础篇(MYSQL)——使用statement执行DML语句(insert/update/delete)
注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package day02_statement; import java.sql.Connection; import java.s ...
- shell编程中如何执行oracle语句
shell编程中如果向oracle中插入数据之类的,需要先把执行语句放到文件中,然后再@这个文件执行 有如下俩种方式供参考: SQL=`sqlplus user/pwd@orains << ...
- python 操作数据库1--连接、执行sql语句
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/20 16:03 # @Author : lijunjiang # @Fi ...
- jdbc java数据库连接 3)Statement接口之执行DDL和DML语句的简化
上一章的代码中,可以发现,jdbc执行DDL和DML有几个步骤都是一样的: 1)执行语句开始时,创建驱动注册对象.获取连接的数据库对象.创建Statement对象 // 创建驱动注册对象 Class. ...
- 使用Statement执行DML和DQL语句
import com.loaderman.util.JdbcUtil; import java.sql.Connection; import java.sql.DriverManager; impor ...
- JAVA基础知识之JDBC——编程步骤及执行SQL
JDBC编程步骤 下面以mysql数据库为例, 1.加载驱动 首先需要下载数据库的驱动jar文件,并且在eclipse包中加入到class path中去, 例如mysql的驱动文件 mysql-con ...
- JDBC数据库编程
常识名词:ODBC ,JDBC,JDBC API ,JDBC Driver API 数据准备,续上节: JDBC编程流程 最基本的JDBC操作 本段内容主要完成JDBC的增删查改操作 packa ...
- ORACLE数据库编程
第一章 Oracle数据库基本概念 一.介绍 Oracle数据库系统是美国Oracle(甲骨文)公司提供的以分布式数据库为 核心的一组软件产品,是目前最流行的客户/服务器(Client/Server, ...
- Java数据库编程、XML解析技术
数据库编程 JDBC概述 是Java Database Connecive,即数据库连接技术的简称,它提供了连接各种常用数据库的能力. 是一种用于执行SQL语句的Java API,可以为多种关系数据库 ...
随机推荐
- 射频识别技术漫谈(7)——ID卡
ID(Identification)是识别的意思,ID卡就是识别卡.ID卡包含范围广泛,只要具有识别功能的卡片都可以叫ID卡,例如条码卡,磁卡都可以是ID卡,我们这儿说的当然是射频识别卡. 射频ID卡 ...
- SQVI和SAP查询QUERY的区别和使用注意事项
SQVI.SAP查询QUERY都适用于简单的表连接数据查询,但都不能打包传输到PRD,不同环境需要重复创建.可以生成报表程序供T-CODE调用,用se93指定事务码和程序名称. 区别1-权限: SQV ...
- Binary Tree Level Order Traversal II --leetcode C++
考察点 广度优先遍历--层次遍历 STL内容器的用法 广度优先遍历的时候,首先应该想到的就是借助于队列.还需要在遍历下一层之前保存当前层节点的数量 代码很简单: class Solution { pu ...
- HTTP基本协议(查看网页代码)
此示例已实现查看网页的代码来理解HTTP基本协议: (返回的是百度首页的网页代码) import java.io.BufferedReader; import java.io.IOException; ...
- Struts2 学习笔记15 Struts标签 part1
来说一下Struts标签,之前我们也很多地方用到了,还是来总结一下. 首先是property标签. <li>property:<s:property value="user ...
- 80x86汇编小站站长简单介绍
[人生格言] 1] 一生都用头脑而不是情绪解决这个问题 2] 仅仅有偏执狂才会成功 3] 在最困难时都要保持一份幽默感 4] 吾生也有涯,而知也无涯,以有涯随无涯,殆已 [简历] 我的生日: 1981 ...
- 使用线程 在shell上同步动态显示当前系统时间
//创建一个用于刷新当前系统时间的线程 new Thread() { public void run() { // 此处为另外一个单独线程,非UI线程 Display dis=shell.getDis ...
- jQuery对DOM的操作
"jQuery中非常重要的部分,就是对DOM的操作!" "jQuery中非常重要的部分,就是对DOM的操作!" "jQuery中非常重要的部分,就是对 ...
- ajax 基础
<html><head><script type="text/javascript">function showHint(str){var xm ...
- Laravel 简单使用七牛云服务
前言 路漫漫其修远兮,吾将上下而求索.学习 Laravel 之初觉得所有东西都很厉害的样子,现在看来就是很厉害啊!最近在写一个项目上传的模块,要上传图片到七牛云,昨天看了一下午七牛云官方的文档感觉还是 ...