【技巧篇】SQLite数据库导入Excel文件、GridControl实现数据库文件的读取
目的:由于在用DevExpress开发的时候,使用的表格控件需要读取数据,所以,就需要获得相应的数据文件。
1.将Excel导成数据库文件
- 打开Excel,将其列整理好(比如合并的列要拆开,标题单元格删除),然后另存为.csv文件即可(UTF-8编码)。
- 打开SQLite的可视化管理工具——Navicat,新建一个连接,如果还没有数据库文件,就选择New SQLite 3,然后选择数据库文件的存储位置。
- 打开数据库的那棵树,在Table上右击选择Import Wizard,然后就可以一步一步选择之前的.csv文件将其制成一张新表了。
至此,数据库已经完成建立。
2.导入SQLite的插件
网上有很多方法,但是官网下载什么的都没有必要,直接右击reference,选择Manage Nuget packages,然后在线搜索SQLite
这些就是需要安装的插件,其实安装第一个,其他的就会给你打包装好的。
2.进行窗体的开发
- 在窗体中选择GridControl控件,然后进行一些列的设计,记住FieldName就是之后连接数据表的列名。
- 然后转到这个窗体的代码文件上来。
除了主要的命名空间外,需要使用这些命名空间:
using System.Data;
using System.Data.SQLite;
主要的代码:
private void gridControl1_Load(object sender, EventArgs e)
{
//添加数据源
BuildDataSource();
}
private void BuildDataSource()
{
//连接数据库
config c = new config();
c.DataSource = @"F:\TMEor\TMEor\TMEor\bin\Debug\databaseSource.db";
SQLiteConnection conn = new SQLiteConnection();
conn.ConnectionString = c.DataSource;
conn.Open();
SQLiteCommand cmd = conn.CreateCommand();
cmd.CommandText = "select * from databaseSource";
SQLiteDataReader reader = cmd.ExecuteReader();
//新建DataTable存储查询到的数据
DataTable dt = new DataTable();
dt.Columns.Add("选择", typeof(bool));
dt.Columns.Add("序号", typeof(string));
dt.Columns.Add("加工内容", typeof(string));
dt.Columns.Add("刀具分类", typeof(string));
dt.Columns.Add("描述", typeof(string));
dt.Columns.Add("刀具直径", typeof(string));
dt.Columns.Add("刀柄夹持直径", typeof(string));
dt.Columns.Add("刀具长度", typeof(string));
dt.Columns.Add("转速", typeof(string));
dt.Columns.Add("进给", typeof(string));
dt.Columns.Add("冷却液压力", typeof(string));
dt.Columns.Add("刀柄类型", typeof(string));
dt.Columns.Add("国产供应商", typeof(string));
dt.Columns.Add("进口供应商", typeof(string));
dt.Columns.Add("刀具状态", typeof(string));
dt.Columns.Add("录入时间", typeof(string));
dt.Columns.Add("录入人员", typeof(string));
dt.Columns.Add("数量", typeof(string));
dt.Columns.Add("最大寿命", typeof(string));
dt.Columns.Add("剩余寿命", typeof(string));
dt.Columns.Add("备注", typeof(string));
while (reader.Read())
{
dt.Rows.Add(new object[] {false, reader[0].ToString(), reader[1].ToString(), reader[2].ToString(), reader[3].ToString(), reader[4].ToString(), reader[5].ToString(),
reader[6].ToString(), reader[7].ToString(), reader[8].ToString(), reader[9].ToString(), reader[10].ToString(), reader[11].ToString(), reader[12].ToString(),
reader[13].ToString(), reader[14].ToString(), reader[15].ToString(), reader[16].ToString(), reader[17].ToString(), reader[18].ToString(), null});
}
conn.Close();
gridControl1.DataSource = dt;
}
然后是使用的一个config类:(用于获取数据源文件)
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SQLite;
namespace TMEor
{
public class config
{
private string DatabaseFile = "";
public string DataSource
{
set
{
DatabaseFile = value;
}
get
{
return string.Format("Data Source={0}", DatabaseFile);
}
}
}
}
备注:
在读取数据文件(while(reader.Read())的时候,循环体里面读取数据库表格中的方法也可以是:
reader.GetString(i);//i是列表的索引,和上面的代码里一样
reader.GetInt16(i);
诸如此类,这样有个缺点就是:如果表格中有null值,就会报错,而上面的方法即使是空值也可以读取到DataTable中。