C#怎样操作文件型数据库?最好有实例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#怎样操作文件型数据库?最好有实例相关的知识,希望对你有一定的参考价值。
首先我想弄明白一点,是excel本身就是文件型数据库还是excel带有微型的access文件型数据库。然后给我的实例最好也是针对上面那点来做的。还请高手指教
首先数据库就是存储数据的仓库(字面理解),所以任何可以存储数据的文本文件都可以称为数据库——包括txt文档。下面是将一个集合从datagridview中导出到excel中:
DataTable datatable = initDataTable();
for (int i = 0; i < ulList.Count; i++)
DataRow datarow = datatable.NewRow();
datarow[0] = ulList[i].Time;
datarow[9] = ulList[i].Remark;
。。。。。。。
datatable.Rows.Add(datarow);
DataSet dataset = new DataSet();
dataset.Tables.Add(datatable);
ExportDataGridViewToExcel(datatable);
//ExportDataGridViewToExcel方法
private void ExportDataGridViewToExcel(DataTable dataGridTable)
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Execl files (*.xls)|*.xls";
saveFileDialog.Title = "导出Excel文件到";
DateTime now = DateTime.Now;
saveFileDialog.FileName = "日志-" + now.Year.ToString().PadLeft(2) + now.Month.ToString().PadLeft(2, \'0\') + now.Day.ToString().PadLeft(2, \'0\') + "-" + now.Hour.ToString().PadLeft(2, \'0\') + now.Minute.ToString().PadLeft(2, \'0\') + now.Second.ToString().PadLeft(2, \'0\');
saveFileDialog.ShowDialog();
Stream myStream;
myStream = saveFileDialog.OpenFile();
StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312"));
string str = "";
try
//写标题
for (int i = 0; i < arycolumnname.Length; i++)
if (i > 0)
str += "\\t";
str += arycolumnname[i];
sw.WriteLine(str);
//写内容
for (int j = 0; j < dataGridTable.Rows.Count; j++)
string tempStr = "";
for (int k = 0; k < dataGridTable.Columns.Count; k++)
if (k > 0)
tempStr += "\\t";
tempStr += dataGridTable.Rows[j][k].ToString();
sw.WriteLine(tempStr);
sw.Close();
myStream.Close();
MessageBox.Show("导出成功");
catch (Exception e)
MessageBox.Show(e.ToString());
finally
sw.Close();
myStream.Close();
//上面用到文件流将其保存程excel文件,还有其他的方式,可以网上收一下——一大堆。追问
大哥,文件型数据库是相对关系型数据库而言的,是可以用SQL语句操作但是不需要安装像SQLServer那样的服务的。你能告诉我excel本身就是还是它带有access文件行数据库?具体怎样控制表结构我不清楚所以才问的
追答excel当然不是关系数据库了,他仅仅相当于一个文件型数据库,他不能和关系数据库同日而语啊。
excel当然不能控制什么表结构。
(ps:或者excel是,但是我不知道,其实excel很强大的,但是在数据库这方面就。。因为它其实不能认为是数据库,就是一个存储工具罢了)
文件数据库又叫嵌入式数据库,将整个数据库的内容保存在单个索引文件中,以便于数据库的发布。
文件数据库的3个重要特征(相对于传统数据库)
1. 数据操作接口
SQL92标准,不管是传统数据库,还是文件数据库,都必须支持SQL92标准。
2. 数据保存格式
传统数据库(DB2, Oracle, SQL server等)数据保存的方式各异。
文件数据库将数据保存在单一文件中。
3. API支持
传统数据库都支持ODBC和JDBC。
某些文件数据库不支持ODBC和JDBC(sqlite都不支持,Berkeley DB有ODBC和JDBC支持,Firdbird有第三方的ODBC驱动)。
文件数据库与传统数据库的比较
优势: 由于数据保存在单一文件中,数据库的部署和发布都比较简单,适用于内嵌在应用程序中。
数据量不是太大时,速度比传统数据库要快。
缺点: 由于数据保存在单一文件中,数据库打开时,该文件会被整个load到内存,应此数据库不能过大(100M以内,个人测试)。
各种文件数据库的比较
Sqlite: 老牌的文件数据库,完全免费 ( public domain ),使用方便,无须任何配置,下载源代码编译成库或者直接编译到应用程序都可以(250K,C代码)。支持事务机制和blob数据类型。
Berkerley DB: 更老牌的文件数据库,最稳定的数据库,完全可以取代大部分传统client/server数据库的应用场合;支持xml(代价是30M硬盘空间)。缺点是配置和使用比较复杂,不太适合小项目。
Firbird:与sqlite比较类似,有C#支持。某些发布版本不能build, 很久没有关注了。
Access:一般不考虑
Sqlite简单介绍
个人比较喜欢sqlite, 使用最方便,唯一的准备工作是下载250K的源;而且作者很热心,有问必答。
以下演示一下使用sqlite的步骤,先创建一个数据库,然后查询其中的内容。2个重要结构体和5个主要函数:
sqlite3 *pdb, 数据库句柄,跟文件句柄FILE很类似
sqlite3_stmt *stmt, 这个相当于ODBC的Command对象,用于保存编译好的SQL语句
sqlite3_open(), 打开数据库
sqlite3_exec(), 执行非查询的sql语句
sqlite3_prepare(), 准备sql语句,执行select语句或者要使用parameter bind时,用这个函数(封装了sqlite3_exec).
Sqlite3_step(), 在调用sqlite3_prepare后,使用这个函数在记录集中移动。
Sqlite3_close(), 关闭数据库文件
还有一系列的函数,用于从记录集字段中获取数据,如
sqlite3_column_text(), 取text类型的数据。
sqlite3_column_blob(),取blob类型的数据
sqlite3_column_int(), 取int类型的数据
…
另外,团IDC网上有许多产品团购,便宜有口碑
c# 泛型学习
.net 从2.0开始支持泛型。泛型可以帮助我们创建独立于被包含类型的类和方法。
不必再为不同类型编写功能相同的方法或类了,只要创建一个泛型类或者方法就可以实现对多种数据类型的操作。
object类型虽然也能让你实现这样的功能,但它不是类型安全的。
泛型不仅是c#语言的一种结构,而且是CLR定义的。所以,在c#中定义的泛型类,也可以在vb中用一个特定的类型实例化该泛型。
object实现与泛型实现
static void Main(string[] args) //System.Collections命名空间下面的ArrayList类,存储的是对象 //Add()方法,添加值类型数据时,需要将参数装箱,转为object类型,在访问数据时,需要将 //数据进行拆箱,要进行强制转换。 var list = new ArrayList(); list.Add(44); int i1 = (int)list[0]; foreach (int item in list) Console.WriteLine(item); //System.Collections.Generic命名空间下面的List<T>,是一个泛型类。 //类型定义为int,所以int类型在jit编译器动态生成的类中使用,编译之后生成新的类型。这个类型就是接受int参数的一个类型 //不再进行拆箱和装箱。 // var ilist = new List<int>(); ilist.Add(44); int i2 = ilist[0]; foreach (var item in ilist) Console.WriteLine(item); Console.ReadKey();
如果加入如下两行代码:
list.Add("hello");
ilist.Add("hello");
使用泛型时,编译不能通过;
而使用object时,编译可以通过,不过在访问数据时,装箱拆箱会报异常。
所以泛型相对于object,是类型安全的,性能也更优。
以上是关于C#怎样操作文件型数据库?最好有实例的主要内容,如果未能解决你的问题,请参考以下文章