数据库在软件开发中发挥着举足轻重的作用,基本上所有的大项目都会用到数据库。ADO .Net是一组向.Net程序员公开数据访问服务的类,其主要分为数据提供程序(Data Provider)和数据集(Data Set),Data Provider主要分为SQLServer、ODBC、OLEDB、Oracle等四种。下面我主要简单介绍SQL Server 2008的C#操作(附件中另附MS Access 2010数据库(OLEDB)的C#简单操作),通过学习C#的数据库操作基础,再举一反三,开放思维,就可以进行大项目中数据库的软件开发。

1、连接数据库(Connection对象)

//连接数据库
string strConn = "server=Gordon-PC\\SQLEXPRESS;database=DB_GHC;uid=sa;pwd=123456";
//string strConn = @"Data Source=localhost\SQLEXPRESS;Initial Catalog=DB_GHC;Integrated Security=True";
SqlConnection connSql = new SqlConnection(strConn);
connSql.Open();
if (connSql.State == ConnectionState.Open)
{
MessageBox.Show("连接成功");
}

  注意,数据库操作完成要及时关闭连接,代码如下:

connSql.Dispose();    //或connSql.Close();

  使用Close方法关闭连接后,可用Open方法再打开连接;而用Dispose方法关闭连接后不可使用Open方法打开连接,须再次重新初始化连接再打开。

  另外,连接数据库的字符串也可放在.config配置文件(xml文件,在项目中“添加应用程序配置文件”)中,配置文件代码如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="DBConnString" connectionString="server=Gordon-PC\SQLEXPRESS;database=DB_GHC;uid=sa;pwd=123456"/>
</connectionStrings>
</configuration>

  使用配置文件中的连接字符串时,要添加引用system.configuration,调用代码如下所示:

string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["DBConnString"].ConnectionString;

  关于SQL Server数据库的连接(字符串中等于号两边不能加空格):

  (1)服务器类型:数据库引擎

  (2)服务器名称:

--服务器名\实例名
server = GAOHONGCHEN\SQLEXPRESS; --或
Data Source = GAOHONGCHEN\SQLEXPRESS; --IP地址(可不加端口号,TCP/IP协议默认端口号1433)
server = 192.168.56.6,1433; --或
Data Source = 192.168.56.6,1433;

  注:SQL Server 2008支持Shared Memory、Named Pipes、TCP/IP、VIA等4种网络协议。默认情况下,SQL Server 使用“共享内存”协议连接到 SQL Server 的本地实例,使用“TCP/IP”或“命名管道”连接到其他计算机上的 SQL Server 实例。

  (3)数据库名:

database = DB_GHC;  --或
Initial Catalog = DB_GHC;

  (4)身份验证:

--当前Windows身份验证
Integrated Security = SSPI (或 true, yes); --或
Trusted_Connection = true (或 yes); --SQL Server身份验证(需用户名和密码)
Integrated Security = false(或 no); --或
Trusted_Connection = false(或 no);

  (5)用户名和密码:

uid = sa;
pwd = 123456;

  关于连接SQLServer2008数据库字符串的写法请参见:http://www.cnblogs.com/tough/archive/2011/11/18/2254076.html

2、执行SQL语句(Command对象)

SqlCommand cmdSql = new SqlCommand();
cmdSql.Connection = connSql;
cmdSql.CommandText = "select * from Tb_GHC";
cmdSql.CommandType = CommandType.Text; SqlDataReader readerSql = cmdSql.ExecuteReader();
while (readerSql.Read())
{
listView1.Items.Add(readerSql[].ToString());//读取数据表第[0]列
}

  ExecuteReader方法:执行SQL语句,并生成一个包含数据的SqlDataReader对象的实例。DataReader对象是数据读取对象,适用于快速读取数据而不需修改数据。

  ExecuteNonQuery方法:执行SQL语句,并返回受影响的行数,在使用SqlCommand向数据库发送增、删、改、查命令时,通常使用ExecuteNonQuery方法执行发送的SQL语句。 

  连接数据库并执行SQL语句,也可使用如下代码一步完成:

SqlConnection connSql = new SqlConnection("server=Gordon-PC\\SQLEXPRESS;database=DB_GHC;uid=sa;pwd=123456");
SqlCommand cmdSql = new SqlCommand("select * from Tb_GHC",connSql);

  下面简单介绍SqlCommand的几种操作:

  增:

string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["DBConnString"].ConnectionString;
SqlConnection connSql = new SqlConnection(strConn);
connSql.Open();
if (connSql.State == ConnectionState.Open)
{
string sqlInsert = "INSERT INTO Tb_GHC(PersonName, BornDate, PersonAddress) VALUES('Hao', '19950625', 'Nanjing')";
SqlCommand cmdSql = new SqlCommand(sqlInsert, connSql);
cmdSql.ExecuteNonQuery();
}
connSql.Dispose();

  删:

string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["DBConnString"].ConnectionString;
SqlConnection connSql = new SqlConnection(strConn);
connSql.Open();
if (connSql.State == ConnectionState.Open)
{
string sqlDelete = "DELETE FROM Tb_GHC WHERE (PersonName = 'Gao')";
SqlCommand cmdSql = new SqlCommand(sqlInsert, connSql);
cmdSql.ExecuteNonQuery();
}
connSql.Dispose();

  改:

string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["DBConnString"].ConnectionString;
SqlConnection connSql = new SqlConnection(strConn);
connSql.Open();
if (connSql.State == ConnectionState.Open)
{
string sqlUpdate = "UPDATE Tb_GHC SET PersonAddress = 'Dezhou' WHERE (PersonName = 'Lu')";
SqlCommand cmdSql = new SqlCommand(sqlInsert, connSql);
cmdSql.ExecuteNonQuery();
}
connSql.Dispose();

  查:

string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["DBConnString"].ConnectionString;
SqlConnection connSql = new SqlConnection(strConn);
connSql.Open();
if (connSql.State == ConnectionState.Open)
{
string sqlQuery = "SELECT PersonName, BornDate, PersonAddress FROM Tb_GHC";
SqlCommand cmdSql = new SqlCommand(sqlInsert, connSql);
SqlDataReader readerSql = cmdSql.ExecuteReader();
while (readerSql.Read())
{
listView1.Items.Add(readerSql[].ToString());//读取数据表第[0]列
}
}
connSql.Dispose();

3、数据适配器(DataAdapter)和数据集(DataSet)

  DataAdapter对象是一个数据适配器对象,是DataSet和数据源之间的桥梁。

  DataSet对象就像存放于内存中的一个小型的数据库,可以包含数据表、数据列、数据行、视图、约束以及关系。通常,DataSet的数据来源于XML或数据库。为了从数据库中获取数据,需使用数据适配器DataAdapter的SelectCommand属性与Command对象建立连接从数据库查询指定的数据,然后通过该对象的Fill方法填充DataSet。

SqlDataAdapter adapterSql = new SqlDataAdapter(cmdSql);
DataSet dataSet = new DataSet();
adapterSql.Fill(dataSet, "Table");

4、显示数据给用户(DataGridView控件)

  通过设置DataGridView控件的DataSource属性为DataSet的表格数据,使其显示数据表中的数据。

DataTable dataTable = new DataTable();
dataTable = dataSet.Tables["Table"];
dataGridView1.DataSource = dataTable;

附:

  C#连接MS Access 2010的简单操作

string strConn = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data source='{0}\AccessTest.accdb'", Application.StartupPath);
OleDbConnection connOle = new OleDbConnection(strConn);
OleDbDataAdapter adapterOle = new OleDbDataAdapter("select * from Tb_GHC", connOle);
DataSet ds = new DataSet();
adapterOle.Fill(ds, "Tb_GHC");
this.dataGridView1.DataSource = ds.Tables[].DefaultView;
connOle.Close();
connOle.Dispose();

  可以看出,C#连接SQL Server 2008和MS Access 2010数据库的操作类似,都是基于ADO .Net技术,ADO .Net架构如下图所示:

  

参考链接:

  http://blog.csdn.net/wangdingqiaoit/article/details/8673926

数据库操作(C#)的更多相关文章

  1. 如何在高并发环境下设计出无锁的数据库操作(Java版本)

    一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...

  2. 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~

    最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...

  3. MySQL 系列(二) 你不知道的数据库操作

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 本章内容: 查看\创建\使用\删除 数据库 用户管理及授权实战 局域网 ...

  4. ABP创建数据库操作步骤

    1 ABP创建数据库操作步骤 1.1 SimpleTaskSystem.Web项目中的Web.config文件修改数据库配置. <add name="Default" pro ...

  5. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. django数据库操作和中间件

    数据库配置 django的数据库相关表配置在models.py文件中,数据库的连接相关信息配置在settings.py中 models.py相关相关参数配置 from django.db import ...

  7. [Android Pro] 完美Android Cursor使用例子(Android数据库操作)

    reference to : http://www.ablanxue.com/prone_10575_1.html 完美 Android Cursor使用例子(Android数据库操作),Androi ...

  8. phpcms v9 中的数据库操作函数

    1.查询 $this->select($where = '', $data = '*', $limit = '', $order = '', $group = '', $key='')   返回 ...

  9. Android打造属于自己的数据库操作类。

    1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要 ...

  10. python之数据库操作

    数据库操作 Python 操作 Mysql 模块的安装 1 2 3 4 5 linux:     yum install MySQL-python   window:     http://files ...

随机推荐

  1. Apache Shiro 使用手册(二)Shiro 认证

    认证就是验证用户身份的过程.在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法.最常见的"实体/凭证"组合便是&quo ...

  2. codeforces 689 E. Mike and Geometry Problem 组合数学 优先队列

    给定一个函数: f([l,r]) = r - l + 1; f(空集) = 0; 即f函数表示闭区间[l,r]的整点的个数 现在给出n个闭区间,和一个数k 从n个区间里面拿出k个区间,然后对这k个区间 ...

  3. C# 时间类型

    字符型转换为字符串// C 货币 2.5.ToString("C"); // ¥2.50 // D 10进制数 25.ToString("D5"); // 25 ...

  4. 如何删除控制文件中过去rman备份到磁带的备份集

    问题描述: 早上做数据库巡检,发现FRA(flash recovery area)空间使用率达到66%,是平时的两倍.由于库不大,备份策略是本地磁盘备份,每天一全备,REDUNDANCY 1 ,备份完 ...

  5. [EventBus源码解析] EventBus.post 方法详述

    前情概要 上一篇blog我们了解了EventBus中register/unregister的过程,对EventBus如何实现观察者模式有了基本的认识.今天我们来看一下它是如何分发一个特定事件的,即po ...

  6. Android IOS WebRTC 音视频开发总结(七二)-- 看到Google Duo,你想到了什么?

    本文主要介绍在线教育这个行业,文章最早发表在我们的微信公众号上,支持原创,详见这里, 欢迎关注微信公众号blackerteam,更多详见www.rtc.help 在昨天的Google I/O大会上Go ...

  7. 【EF学习笔记06】----------加载关联表的数据 延迟加载

    讲解之前,先来看一下我们的数据库结构:班级表 学生表 延迟加载 //延迟加载 using (var db = new Entities()) { //查询班级 var classes = (from ...

  8. <读书笔记>软件调试之道 :实证方法

    有效调试不仅仅是排除缺陷,其包含如下几个步骤 弄明白软件为何运行错误 修复这个问题 避免破坏其它部分 保持或者提高代码的总体质量 确保同样的问题不在其它地方发生,也不会再次发生 构建实验.观察结果 依 ...

  9. MFC的自定义消息的定义与使用

    自定义消息的响应和资源消息的响应有很多类似之处:资源消息的响应是以资源的ID号作为标识的:自定义的消息要自己声明消息ID. 一.           定义: 第一步要声明消息: #define WM_ ...

  10. javascript高级程序设计--笔记01

    概述 JavaScript的实现包含三个部分: 1  核心(ECMAScript)   提供核心语言功能 2  文档对象模型(DOM)  一套提供了访问以及操作网页内容的API 3  浏览器对象模型( ...