c#数据操作:数据库访问 和 文件操作
2012-07-28 11:34
330 查看
数据操作
本节分为两大类:数据库访问和 文件操作
一、数据库访问
ADO.NET概述
.NET名字的由来可参考如下链接:【趣闻】.NET为什么被叫做.NET
微软公司的数据访问技术所走过的几个阶段:
连接数据库:
以SqlConnection类为例记录。
以下代码的功能:设置连接参数、创建SQL Server连接、断开连接。
using System;
using System.Data.SqlClient;
namespace ADO_SqlConnection
{
/// <summary>
/// 连接SQLServer数据库示例
/// </summary>
class T
{
/// <summary>
/// 连接SQLServer数据库示例
/// </summary>
public void CreateSqlConnection()
{
//得到一个SqlConnection
SqlConnection myCon = new SqlConnection();
//构造连接字符串
myCon.ConnectionString = "Persist Security Info=False;User id=sa;pwd=sa;database=northwind;server=(local)";
//建立连接
myCon.Open();
//输出连接状态
Console.WriteLine("{0}",myCon.State); //输出:Open
//断开连接
myCon.Close();
//输出连接状态
Console.WriteLine("{0}",myCon.State); //输出:Closed
}
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
T t=new T();
t.CreateSqlConnection();
}
}
}
管理其他数据源连接同连接SQL Server数据库类似,可以使用System.Data中其他的类来创建其他数据源的连接,具体包括一下三类:OleDbConnection:可管理OLE DB访问的任何数据源的连接
OdbcConnection:可管理通过使用连接字符串 或 ODBC数据库名称创建数据源连接。
OracleConnection:可管理Oracle数据库连接
与数据库交互:
使用DBCommand(统称)对象表示一个SQL查询或者一个存储过程,而DataAdapter对象常用来把一个DBCommand递交给数据库。
DBCommand是一个统称,包括以下4个类:
DBSqlCommand的使用
1.SqlCommand执行费查询命令:.ExecuteNonQuery()
修改和查询数据库中的数据:()
使用SqlCommand 执行查询命令:
(1):使用自身的ExecuteReader 和 ExecuteXmlReader 方法,获取只读的数据,并存放于DataReader对象 和 XmlReader对象。
(2):本身只作为一条SQL语句 或者 一个存储过程,结合后面的DataAdapter、DataSet实现数据查询。
使用DataAdapter提交查询命令
DataAdapter表示一组数据命令 和一个 数据库连接,可以向数据库提交DBCommand对象所代表的SQL查询命令,同时获取返回的数据结果集。
常用属性:
方法:
参数dataSet表示查询结果所要填充的DataSet(后面介绍)
示例:
管理内存数据
当完成对数据库的查询后,需要把所获取的数据保留下来,ADO.NET使用数据集对象在内存中缓存查询结果数据。
数据集对象的结构类似于关系数据库的表,包括表示表、行和列等数据对象模型的类,还包含为数据集定义的约束和关系。
在ADO.NET中,可以作为数据集对象的类如下所示:
使用DataTable实现内存表
这些对象与ADO.NET中对象的对应关系:
示例:
使用DataSet管理数据
对应关系:
示例:
使用DataReader获取只读数据
除了DataSet,还可以使用DataReader 来获取数据。
示例:
比较:DataSet 和 DataReader
通常来说,下列情况下适合使用DataSet。
在应用程序需要以下功能时,则可以使用DataReader
二、文件操作
在一些小的应用中,有时候不需要使用数据库这样大规模的数据管理工具,也很少进行数据的查询、修改等操作,而仅用文件来存储数据,这时就需要使用.NET中的文件操作对象,如File 、StreamReader、 streamWriter等。
使用File对象操作文件
System.IO.File提供了一系列的静态方法,完成对文件的常用操作,如新建、删除、拷贝、移动等。
常用方法:
读写文件
1. 使用StreamWriter写入文件
常用的属性和方法:
常用属性:
常用方法:
构造方法:
2. 使用StreamReader读取文件
属性:
方法:
整个示例:
本节分为两大类:数据库访问和 文件操作
一、数据库访问
ADO.NET概述
.NET名字的由来可参考如下链接:【趣闻】.NET为什么被叫做.NET
微软公司的数据访问技术所走过的几个阶段:
ODBC: (Open Database Connectivity)是微软公司开放服务结构中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。 DAO: (Data Access Objects) 数据访问对象是第一个面向对象的接口,它显露了 Microsoft Jet 数据库引擎,并允许 Visual Basic 开发者通过 ODBC 象直接连接到其他数据库一样,直接连接到Access 表。DAO 最适用于单系统应用程序或小范围本地分布使用。 RDO: OLE DB(Object Linking and Embedding, Database):基于COM(component object model),支持非关系数据的访问 ADO:基于OLE DB ,更简单、更高级、更适合Visual Basic程序员。 ADO.NET: 基于.NET体系架构,优化的数据访问模型和基于COM的ADO是完全不同的数据访问方式。 |
连接数据库:
以SqlConnection类为例记录。
以下代码的功能:设置连接参数、创建SQL Server连接、断开连接。
using System;
using System.Data.SqlClient;
namespace ADO_SqlConnection
{
/// <summary>
/// 连接SQLServer数据库示例
/// </summary>
class T
{
/// <summary>
/// 连接SQLServer数据库示例
/// </summary>
public void CreateSqlConnection()
{
//得到一个SqlConnection
SqlConnection myCon = new SqlConnection();
//构造连接字符串
myCon.ConnectionString = "Persist Security Info=False;User id=sa;pwd=sa;database=northwind;server=(local)";
//建立连接
myCon.Open();
//输出连接状态
Console.WriteLine("{0}",myCon.State); //输出:Open
//断开连接
myCon.Close();
//输出连接状态
Console.WriteLine("{0}",myCon.State); //输出:Closed
}
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
T t=new T();
t.CreateSqlConnection();
}
}
}
管理其他数据源连接同连接SQL Server数据库类似,可以使用System.Data中其他的类来创建其他数据源的连接,具体包括一下三类:OleDbConnection:可管理OLE DB访问的任何数据源的连接
OdbcConnection:可管理通过使用连接字符串 或 ODBC数据库名称创建数据源连接。
OracleConnection:可管理Oracle数据库连接
与数据库交互:
使用DBCommand(统称)对象表示一个SQL查询或者一个存储过程,而DataAdapter对象常用来把一个DBCommand递交给数据库。
DBCommand是一个统称,包括以下4个类:
OleDbCommand: SqlCommand: OdbcCommand: OracleCommand: |
DBSqlCommand的使用
1.SqlCommand执行费查询命令:.ExecuteNonQuery()
修改和查询数据库中的数据:()
SqlConnection myCon = new SqlConnection(); myCon.ConnectionString = "Persist Security Info=False;User id=sa;pwd=123;database=northwind;server=(local)"; myCon.Open(); //使用SqlCommand SqlCommand selectCMD = new SqlCommand(); selectCMD.Connection=myCon; selectCMD.CommandText="SELECT top 10 CustomerID, CompanyName FROM Customers"; //使用修改一行数据,完成非查询的SQL操作 selectCMD.CommandText="UPDATE Customers SET CompanyName='Wangminli' WHERE CustomerID = 'ALFKI'"; int i=selectCMD.ExecuteNonQuery();//非查询命令 Console.WriteLine("{0}行被修改。",i); //输出:1行被修改。 //断开连接 myCon.Close();
使用SqlCommand 执行查询命令:
(1):使用自身的ExecuteReader 和 ExecuteXmlReader 方法,获取只读的数据,并存放于DataReader对象 和 XmlReader对象。
(2):本身只作为一条SQL语句 或者 一个存储过程,结合后面的DataAdapter、DataSet实现数据查询。
使用DataAdapter提交查询命令
DataAdapter表示一组数据命令 和一个 数据库连接,可以向数据库提交DBCommand对象所代表的SQL查询命令,同时获取返回的数据结果集。
常用属性:
SelectCommand:用于指定SqlDataAdapter所要提交的SQL语句,是最常用的属性。 InsertCommand:插入SQL命令。 DeleteCommand: 删除SQL命令。 |
Public abstract int Fill(DataSet dataSet); |
示例:
//连接数据库 SqlConnection myCon = new SqlConnection("Persist Security Info=False;User id=sa;pwd=123;database=northwind;server=(local)"); myCon.Open(); //使用SqlCommand SqlCommand selectCMD = new SqlCommand("SELECT top 10 CustomerID, CompanyName FROM Customers",myCon); //获取数据适配器 SqlDataAdapter custDA = new SqlDataAdapter(); custDA.SelectCommand = selectCMD; //提交查询,获取结果数据集 DataSet custDS=new DataSet(); custDA.Fill(custDS); //断开连接 myCon.Close();
管理内存数据
当完成对数据库的查询后,需要把所获取的数据保留下来,ADO.NET使用数据集对象在内存中缓存查询结果数据。
数据集对象的结构类似于关系数据库的表,包括表示表、行和列等数据对象模型的类,还包含为数据集定义的约束和关系。
在ADO.NET中,可以作为数据集对象的类如下所示:
System Data DataSet DataTable DataColumn Constraint DataRelation DataRow |
使用DataTable实现内存表
这些对象与ADO.NET中对象的对应关系:
数据表 →DataTable 数据列 →DataColomn 数据行 →DataRow 约束 →Constraint 关系 →DataRelation |
示例:
使用DataSet管理数据
对应关系:
DataSet → 数据库 DataTable → 数据表 |
示例:
//连接数据库 SqlConnection myCon = new SqlConnection(); myCon.ConnectionString = "Persist Security Info=False;User id=sa;pwd=123;database=northwind;server=(local)"; myCon.Open(); //使用SqlCommand提交查询命令 SqlCommand selectCMD = new SqlCommand("SELECT CustomerID, CompanyName FROM Customers", myCon); //获取数据适配器 SqlDataAdapter custDA = new SqlDataAdapter(); custDA.SelectCommand = selectCMD; //填充DataSet DataSet custDS = new DataSet(); custDA.Fill(custDS, "Customers"); //显示XML格式的数据 //Console.WriteLine("{0}",custDS.GetXml()); //显示其中的DataTable对象中的数据 for(int i=0;i<custDS.Tables[0].Rows.Count;i++) { for(int j=0;j<custDS.Tables[0].Columns.Count;j++) { Console.Write("{0} ",custDS.Tables[0].Rows[i].ItemArray[j]); } Console.WriteLine(); } //断开连接 myCon.Close(); Console.Read();
使用DataReader获取只读数据
除了DataSet,还可以使用DataReader 来获取数据。
示例:
//连接数据库 SqlConnection myCon = new SqlConnection("Persist Security Info=False;User id=sa;pwd=123;database=northwind;server=(local)"); myCon.Open(); //使用SqlCommand SqlCommand selectCMD = new SqlCommand("SELECT top 10 CustomerID, CompanyName FROM Customers",myCon); //创建SqlDataReader SqlDataReader custDR=selectCMD.ExecuteReader(); //输出查询的数据 while(custDR.Read()) { Console.Write("{0} ",custDR.GetString(custDR.GetOrdinal("CustomerID"))); Console.Write("{0} ",custDR.GetString(custDR.GetOrdinal("CompanyName"))); Console.WriteLine(); } //断开连接 myCon.Close();
比较:DataSet 和 DataReader
通常来说,下列情况下适合使用DataSet。
1、 操作结果中含有多个分离的表。 2、 操作来自多个源(多个数据库、XML的混合文件)的数据。 3、 在系统的各个层之间交换数据。 4、 通过缓冲重复使用相同的行集合以提高性能。 5、 每行执行大量的处理。 6、 使用XML操作维护数据。 |
1、 不需要缓冲数据。 2、 正在处理的结果集太大而不能全部放入内存中。 3、 需要迅速的一次性访问数据,采用只向前的只读方式。 |
二、文件操作
在一些小的应用中,有时候不需要使用数据库这样大规模的数据管理工具,也很少进行数据的查询、修改等操作,而仅用文件来存储数据,这时就需要使用.NET中的文件操作对象,如File 、StreamReader、 streamWriter等。
使用File对象操作文件
System.IO.File提供了一系列的静态方法,完成对文件的常用操作,如新建、删除、拷贝、移动等。
常用方法:
Copy: Create: Delete: Exists: Move: Open/OpenText: OPenRead/OpenWrite: Move: |
读写文件
1. 使用StreamWriter写入文件
常用的属性和方法:
常用属性:
AutoFlush: bool类型,指示是否每次调用Write后,将缓冲区输出 Encoding: |
Close: Flush: 清理当前StreamWrite的所有缓冲区,并写入所有缓冲数据。 Write: 写入方法。 WriteLine:写入方法,后跟行结束符。 |
构造方法:
public StreamWriter(Stream path, bool append, Encoding encoding); 参数: Path:路径 append:是否追加 encoding:要使用的字符编码 |
2. 使用StreamReader读取文件
属性:
CurrentEncoding: 当前StreamReader正在使用的字符编码 |
Close: Peek:返回下一个可用字符,但不使用它 Read:读取输入的下一个字符 或 下一组字符。 ReadBlock:从当前流中读取最大数量的字符,并将数据写入缓冲区中。 ReadLine: ReadToEnd:从流的当前位置到末尾读取流。 |
整个示例:
class Class1 { StreamWriter ///<summary> ///在当前目录下,创建文件test.txt ///</summary> private void CreateFile() { string fileName=".\\test.txt"; //当前目录为工程文件下的\bin\Debug File.Create(fileName); //使用File的Create静态方法 } ///<summary> ///文件拷贝方法 ///</summary> private void CopyFile() { string sourceFileName=".\\test.txt"; //源文件 string destFileName="D:\\test.txt"; //目标文件 File.Copy(sourceFileName,destFileName,true); //使用File的Copy静态方法 } ///<summary> ///文件改名 ///</summary> private void RenameFile() { string oldFileName=".\\test.txt"; //旧文件 string newFileName=".\\test2.txt"; //新文件 File.Move(oldFileName,newFileName); //使用File的Copy静态方法 } ///<summary> ///删除文件 ///</summary> private void DeleteFile() { string fileName=".\\test2.txt"; //旧文件 File.Delete(fileName); //使用File的Delete静态方法 } ///<summary> ///文件写入 ///</summary> private void WriteFile() { string fileName=".\\test.txt"; //文件名 StreamWriter writer=new StreamWriter(fileName,false,System.Text.Encoding.Default); //构造一个StreamWriter writer.WriteLine("Hello StreamWriter!"); //向文件写入一行数据 writer.Flush(); //写入缓冲区的数据 writer.Close(); } ///<summary> ///文件读取 ///</summary> private void ReadFile() { string fileName=".\\test.txt"; //文件名 StreamReader reader=new StreamReader(fileName,System.Text.Encoding.Default,false,1024); string line=reader.ReadLine(); //读取 Console.WriteLine(line); //输出 reader.Close(); Console.Read(); } ///<summary> ///应用程序的主入口点。 ///</summary> [STAThread] static void Main(string[] args) { Class1c=new Class1(); //c.CreateFile(); //c.CopyFile(); //c.RenameFile(); //c.WriteFile(); c.ReadFile(); } |
相关文章推荐
- 关于HSQLDB访问已有数据库文件的操作说明
- 误操作,将数据文件物理删除,访问不了数据库,解决方法
- 7.27--SSH学习之SpringMVC,Ajax请求、拦截器、文件上传和MyBatis访问数据库基本操作
- android 数据库技术 | 文件系统,SDCARD访问,CONTENT PROVIDER,SQLITE ,CURSOR操作,CURSOR适配器,SQLITEHELPER,数据库设计模式
- 关于HSQLDB访问已有数据库文件的操作说明
- (转)对路径"xxxxx"的访问被拒绝(文件操作权限)的解决方法
- Esper(二) 数据库篇 1 从数据库操作 pom文件中要依赖的jar包
- 数据库底层—访问操作
- 无法升级数据库 'xxxx',因为它是只读的,或者具有只读文件。请将数据库或文件设为可写,然后重新运行恢复操作。
- 使用SQLite的命令行工具访问数据库文件
- 使用XAMPP可视化管理Mysql,使用JDBC访问数据库执行插入、查询、删除等操作
- 收缩日志文件错误:对数据库的备份、文件操作(如 ALTER DATABASE ADD FILE)以及加密更改必须序列化
- 看"GeneXus存取图片或文件到数据库的操作"后感
- javabean操作文件正确,但是Jsp调用javabean时文件路径出错问题解决之JavaBean访问本地文件实现路径无关实现方法
- Linux下oracle11gR2系统安装到数据库建立配置及最后oracle的dmp文件导入一站式操作记录
- java-mybatis generator-生成 mysql 数据库访问文件
- 数据库最基本的操作--另存为sql文件
- 操作文件访问被拒绝的解决办法
- linux 下访问windows下的数据库操作
- 使用SQLite的命令行工具访问数据库文件