第05篇:C#星夜拾遗之使用数据库

前言

C#常用来开发数据管理类软件,所以学会在C#程序中使用数据库是非常有必要的。目前微软的两个常用数据库软件分别是AccessSql Server。读者可以自行了解这两种数据库的优劣点,笔者不做过多说明。这两种数据库也是在做开发时最常用的。

C#访问数据库是通过ADO.NET实现的。ADO.NET 是一组向 .NET Framework 程序员公开数据访问服务的类。ADO.NET 为创建分布式数据共享应用程序提供了一组丰富的组件。它提供了对关系数据、XML 和应用程序数据的访问,因此是 .NET Framework 中不可缺少的一部分。ADO.NET 支持多种开发需求,包括创建由应用程序、工具、语言或 Internet 浏览器使用的前端数据库客户端和中间层业务对象。

MSFramework 3.5中提供了Linq to Sql技术,但本文不做探讨,感兴趣的朋友可以阅读《LINQ体验系列文章导航》。本文将以Sql Server为例,介绍最基本是数据库使用方法:数据库连接、数据库命令、Sql语句、适配器、DataSet等。如果你已经了解了这些内容,那么请关掉这篇文章,笔者对于浪费你的宝贵时间表示歉意 :

 

数据库连接

1、  引用命名控件System.Data, 并添加System.Data.SqlClient引用。

2、  获取连接字符串。这个字符串通常被放在App.config文件中;在Asp.NET程序里放在web.config文件中。你可以通过VS 2008 自动生成这个连接字符串。步骤如下:“数据”菜单项 > 添加数据源 > 选择“数据库”,下一步 > 点击“新建连接”> 在列表中选择“Microsoft Sql Server”,单击“继续”。这时会弹出一个“添加连接”的窗口,在这里选择Sql Server服务器,如果是本机,则填写(Local),或者点一个点即可。这里需要注意的是,如果你安装的是Express 2005版,需要填写 .\SqlExpress。接下来是选择登陆方式,笔者建议初学者使用Windows身份验证。然后选择数据库,选择完成数据库后即可点击“确定”按钮。这时回到了“选择数据库连接”窗口,点开折叠的连接字符串部分,这里面的字符串就是一个Sql Server连接字符串了。(Access也是这个步骤,自己试试吧。)

3、  使用这个字符串初始化一个数据库连接对象。Sql Server 连接类是SqlConnection,我们可以使用下面的代码实例化一个数据库连接对象:

SqlConnection sqlConn = new SqlConnection(connectionString);

connectionString 是上一步生成的连接字符串。如果不在构造函数中初始化连接字符串,也可以在先实例化一个对象,然后设置ConnectionString属性。代码如下:

SqlConnection sqlConn = new SqlConnection();

sqlConn.ConnectionString = connectionString;

 

数据库命令

1、  数据库命令在C#中使用类SqlCommand表示。SqlCommand类表示要对 SQL Server 数据库执行的一个 Transact-SQL 语句或存储过程。此类无法继承。

2、  实例化一个SqlCommand类,需要一个可用的数据库连接和一个可执行的Sql语句。代码如下:

SqlCommand sqlCmd = new SqlCommand(sqlText,, sqlConn);

sqlText为可执行的Sql语句,sqlConn为一个可用的数据库连接

也可以在实例化SqlCommand对象后,设置CommandText属性和Connection属性。相应的代码如下:

SqlCommand  sqlCmd = new SqlCommand();

sqlCmd.CommandText = sqlText;

sqlCmd.Connection = sqlConn;

 

Sql语句

如果你不了解Sql语句,那麻烦可就大了,赶快翻书吧,查查Sql语句该如何书写。如果想整点儿速成的东西,这里也只能给出几个简单的语句:

1、  Select语句:作用是从数据库中查询数据。如果你的数据库中有一个名为 books 的数据表,当要从books 中查询出所有数据时,你就可以这样写:

Select * From books;

如果只想从books中查询BookName(名称)和BookAuthor(作者)两个字段,可以这样写:

Select BookName, BookAuthor From books;

注:Sql语句是不区分大小写的。

如果你只想查询名称为《C#星夜拾遗》的书,则可以使用Where进行条件查询:

Select BookName, BookAuthor From books Where BookName = ‘C#星夜拾遗》’;

2、  Insert 语句:作用是向数据库中插入一条数据。例如有一本书名为《C#星夜拾遗》,作者为齐飞的书,你就可以使用下面的语句插入数据库:

Insert into books (BookName, BookAuthor) Values (‘C#星夜拾遗》’, ‘齐飞’);

3、  Update语句:作用是更新一条数据库中的数据,例如需要将《C#星夜拾遗》这本书的Price字段更新为39,那么Sql语句应该这样写:

Update books set Price=39 Where BookName=’C#星夜拾遗》’;

注意,这里的Where条件很关键,如果不加Where条件,则会将整个数据表中所有行的Price都更新为39

4、  Delete语句:作用是删除记录。下面来删除书名为《C#星夜拾遗》的记录:

Delete From books Where BookName=’C#星夜拾遗》’;

注意,这里的Where同样很关键,如果去掉,则会删除数据表中的所有行。

 

适配器和DataSet

相对与Sql Server的数据适配器是SqlDataAdapter,这个适配器的作用是执行一些辅助的工作,例如填充DataSet等。下面的语句将使用一个SqlDataAdapter填充一个DataSet

SqlDataAdapter da = new SqlDataAdapter();

da.SelectCommand = sqlCmd;

DataSet ds = new DataSet();

da.Fill(ds);

注意:在执行Sql语句时,都需要一个打开的数据库连接,也就是需要以编程的方式打开数据库连接,代码为 sqlConn.Open();当连接使用完成后,再显示的将数据库关闭,代码为:sqlConn.Close();但是这里为什么没有呢?因为SqlDataAdapter已经帮我们完成了这部分操作。

回过头来说一下DataSetDataSet ADO.NET 结构的主要组件,它是从数据源中检索到的数据在内存中的缓存。DataSet 由一组 DataTable 对象组成,您可使这些对象与 DataRelation 对象互相关联。您还可通过使用 UniqueConstraint ForeignKeyConstraint 对象在 DataSet 中实施数据完整性。

我们可以将DataSet看成是一个数据表的集合,当我们使用SqlDataAdapterDataSet进行数据填充后,DataSet将保存我们检索到的数据,方便我们使用。

下面假定数据表books 中存在一条BookName为《C#星夜拾遗》,BookAuthor为齐飞、Price 39的记录,我们的Select语句为:

Select BookName, BookAuthor,Price From books Where BookName = ‘C#星夜拾遗》’;

当使用上面的方法进行数据填充后,我们可以使用如下代码得到DataSet中的数据:

if (ds.Tables[0].Rows.Count > 0)

{

    foreach (DataRow dr in ds.Tables[0].Rows)

    {

        string strBookName = dr["BookName"].ToString();

        string strAuthor = dr["BookAuthor"].ToString();

        double dPrice = Convert.ToDouble(dr["Price"]);

    }

}

 

结束语

本文只对数据库的访问和简单Sql的使用进行了说明,初学者朋友可以尝试一下书中提到的例子,由于时间仓促,没有将代码整理为Demo,还望朋友们见谅。这些内容只是ADO.NET的皮毛,如果想深入了解,除了多练习之外,还要看看MSDN中对于ADO.NET的讲解,那才是一个完整的数据库访问教程。

 

 

 

转载于:https://www.cnblogs.com/youring2/archive/2010/05/15/1736424.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux sed删除指定行_shell三剑客之sed!

背景sed(Stream Editor 流编辑器),作为三剑客的一份子,主要的功能有增删改查。为什么称之为“流”编辑器呢?大家知道:在Linux文件系统中,一切都可以作为文件来处理。比如:配置文件、设备文件、日志等等。se…

Hadoop源码解析之: TextInputFormat如何处理跨split的行

Hadoop源码解析之: TextInputFormat如何处理跨split的行转载于:https://blog.51cto.com/taikongren/1742425

linux cpu使用率1200%,linux下用top命令查看cpu利用率超过100%

今天跑了一个非常耗时的批量插入操作。。通过top命令查看cpu以及内存的使用的时候,cpu的时候查过了120%。。以前没注意。。通过在top的情况下按大键盘的1,查看的cpu的核数为4核。通过网上查找,发现top命令显示的是你的程序占用的cpu的总数&am…

Js-载入时选中文

<form action""> <input type"text" name"textRange" size"50" value"这是豪情的blog&#xff0c;这里是技术的海洋&#xff0c;是人生的第一起跑线~&#xff01;" /><br /> <textarea name"your…

FileUpload时用Javascript检查扩展名是否有效

通用的检查方法。首先定义好有效的文件扩展名&#xff0c;存放在阵列中。 在JavaScript获取FileUpload控件的文件路径&#xff0c;并取得路径中的文件扩展名。再与阵列中的扩展名比较&#xff0c;如果存在&#xff0c;说明上传的文件是有效的&#xff0c;反之无效。 <asp:Fi…

python爬虫豆瓣250_python爬虫二 爬取豆瓣Top250上

The Dormouses storyOnce upon a time there were three little sisters; and their names were Elsie, Lacie and Tillie; and they lived at the bottom of a well.... """ 使用BeautifulSoup解析这段代码,能够得到一个 BeautifulSoup 的对象,并能按照标准的缩…

【02】把 Elasticsearch 当数据库使:过滤和排序

使用 https://github.com/taowen/es-monitor 可以用 SQL 进行 elasticsearch 的查询。本章介绍简单的文档过滤条件 exchangenyse SQL $ cat << EOF | ./es_query.py http://127.0.0.1:9200 select * from symbol where exchangenyse limit 1 EOF {"sector": &q…

登录页面跳出框架的JS

框架页面下跳转到登录页面&#xff0c;会遇到登录页面仍然在框架中 <script type"text/javascript">if (top.location ! self.location) {top.locationself.location;}</script> 这个js就能解决问题了&#xff01;转载于:https://www.cnblogs.com/longxi…

python dialect='excel'是什么意思_python读取和生成excel文件

今天来看一下如何使用python处理excel文件&#xff0c;处理excel文件是在工作中经常用到的&#xff0c;python为我们考虑到了这一点&#xff0c;python中本身就自带csv模块... 今天来看一下如何使用python处理excel文件&#xff0c;处理excel文件是在工作中经常用到的&#xff…

linux运维工程师 知乎,运维面试一般问些什么问题 知乎

面试基本上都离不开以下这些问题&#xff1a;1.请用最简洁的语言描述您从前的工作经历和工作成果。2.您认为此工作岗位应当具备哪些素质&#xff1f;3.您平时习惯于单独工作还是团队工作&#xff1f;4.您对原来的单位和上司的看法如何&#xff1f;5.您如何描述自己的个性&#…

[ javascript ] 司徒正美的fadeOut-fadeIn效果!

首先感谢司徒正美的文章! 在司徒大神的博客看到一个简单的渐入渐出的效果。全然採用js实现。 例如以下&#xff1a; <!doctype html> <html dir"ltr" lang"zh-CN" ><head><meta charset"utf-8"/><meta http-equiv&qu…

玩转博客园的5个小技巧

转载自:http://www.cnblogs.com/lloydsheng/archive/2010/05/17/1737267.html 写博客也有几年了&#xff0c;现在能找到的第一篇博文发布时间是2007年11月11日&#xff0c;那还是在百度空间里面的&#xff0c;其实更早的是在csai&#xff0c;不过帐号&#xff0c;密码&#xff…

业务层勿用继承,不要为了方便舍弃了性能。TʌT不好意思我错了

很多人喜欢在action 或service或dao层继承一些公共的东西 比如jdbc或一些其他的东西 我看过一些小源码也经常这样 废话不多说 直入正题 直入正题前先科普一下TheardLocal类 懂的人直接跳 线程不安全指的是一个带有类成员变量&#xff08;状态&#xff09;的类的单列被多个线程访…

python棋盘最短路径_【leetcode】64. Minimum Path Sum 棋盘最短路径

1. 题目 Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path. Note: You can only move either down or right at any point in time. 2. 思路 从右下往左上移动&#x…

linux kvm安装win7,ubuntu14.04 使用kvm安装win7系统

办公电脑从win7换成ubuntu已经有几个月了..环境:ubuntu 14.04kvm 2.0.0需要的各种软件也都安装的差不多了.. 迅雷 qq office vmware 等 这些我常用的软件也都安装上了..我的电脑配置也算可以了(thinkpad E 系列 i5 8G内存 )但是vmware这个东西在ubuntu上的表现不是那么让人满意…

Python 18.4 aiohttp

aiohttpasyncio可以实现单线程并发IO操作。如果仅用在客户端&#xff0c;发挥的威力不大。如果把asyncio用在服务器端&#xff0c;例如Web服务器&#xff0c;由于HTTP连接就是IO操作&#xff0c;因此可以用单线程coroutine实现多用户的高并发支持。asyncio实现了TCP、UDP、SSL等…

python函数和模块有什么特性_python-函数包和模块

python函数的作用&#xff1a; 在Python代码段中如果有一段几十行的代码&#xff0c;需要多次重复使用这几十行代码时&#xff0c;为了提高代码的可用性&#xff0c;将代码段放进函数体内&#xff0c;以后在使用中直接调用该函数模块即可&#xff0c;函数是一个独立的函数体或是…

hibernate继承映射之每个具体类一张表

数据模型 表person 表student 表worker 对象模型 Person private String id;private String name;private int age;private String sex; Student extends Person private String school; Worker extends Person private String factory; xml配置&#xff1a; <?xml version…

linux系统下安装qgis,深度操作系统 deepin 15.11安装 QGIS 3.4

深度操作系统是基于Linux内核&#xff0c;以桌面应用为主的开源 GNU/Linux 操作系统&#xff0c;支持笔记本、台式机和一体机。深度操作系统(deepin)包含深度桌面环境(DDE)和近30款深度原创应用&#xff0c;及数款来自开源社区的应用软件&#xff0c;支撑广大用户日常的学习和工…

读取并修改App.config文件(转载)

1. 向项目添加app.config文件&#xff1a;右击项目名称&#xff0c;选择“添加”→“添加新建项”&#xff0c;在出现的“添加新项”对话框中&#xff0c;选择“添加应用程序配置文件”&#xff1b;如果项目以前没有配置文件&#xff0c;则默认的文件名称为“app.config”&…