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很强大的,但是在数据库这方面就。。因为它其实不能认为是数据库,就是一个存储工具罢了)

参考技术A 文件数据库

文件数据库又叫嵌入式数据库,将整个数据库的内容保存在单个索引文件中,以便于数据库的发布。

文件数据库的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#怎样操作文件型数据库?最好有实例的主要内容,如果未能解决你的问题,请参考以下文章

C#怎样把得到的txt文件数据导入DataTable里面!

WPF 中C#怎样调用VB6.0库生成的dll文件

C++文件读取中,怎样从文件中读取一种类型的数据

如何把局域网内另一台电脑上的DMP文件导入到本机ORACLE数据库中?用PLSQL如何操作?最好有图解

C#操作XML文件实例汇总

怎样在C#中调用DLL中的函数,最好有代码和详细说明