返回顶部

【技巧篇】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中。

posted @ 2020-03-19 14:18  藤原豆腐店の張さん  阅读(2926)  评论(0编辑  收藏  举报