C#代码远程MySQL数据库的数据每天定时更新至本地SQLite数据中,求大神帮忙!

复制粘贴式的学习 2018-05-09 04:04:43
如题,越完整越好,只是思路的话,我还是弄不出来,我是个刚入行的超级菜鸟,但现在又没有时间让我慢慢消化,学习了,只能想办法先做出来!
需求:
1、实时更新MySQL数据库中的数据到本地数据库
2、本地数据库导出为Excel表格,增加导出进度条功能,不影响主程序窗口运行,操作
3、断点续传的功能
拜谢大神们!!!!!!大神们,我是菜鸟中的战斗鸟,所以,越完整越好,不然我可能会看不懂,百度很多就因为这样,所以看不懂!谢谢了!
...全文
1573 53 打赏 收藏 转发到动态 举报
写回复
用AI写文章
53 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
谢谢大神, 百度我有查过,但不懂,所以才问的,不好意思!
引用 51 楼 yangliu0512 的回复:
就是不愿意自己去百度一下,Mysql数据库的连接字符串是类似这样的格式 的:Provider=MySQLProv;Data Source=mydb;User Id=myUsername;Password=myPassword; 你自己根据情况修改一下值。 https://jingyan.baidu.com/article/22a299b51d22d59e19376a0d.html
  • 打赏
  • 举报
回复

引用 48 楼 Dmhl_max 的回复:
[quote=引用 46 楼 yangliu0512 的回复:]

using System;
using System.Data.OleDb;
using System.Data;
using System.Data.SQLite;

namespace WindowsFormsApp1
{
class Class1
{
//从mysql数据库获取数据
public DataTable getDataTable(string sql)
{
string connstring = ""; //mysql数据库的连接字符串
OleDbConnection conn = new OleDbConnection(connstring);
OleDbCommand cmd = new OleDbCommand(sql, conn);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}

//将数据写入sqlite
public void insertData(DataTable dt)
{
string connstring = ""; //sqlite数据库的连接字符串

//这里假设你的sqlite数据库跟mysql数据库结构一样
string sql = "insert into tablename(";
for(int i=0; i<dt.Columns.Count;i++)
{
sql += dt.Columns[i].ColumnName;
if (i != dt.Columns.Count - 1)
{ sql += ","; }
}
sql += ") values(";
for (int i = 0; i < dt.Columns.Count; i++)
{
sql += "@V"+i;
if (i != dt.Columns.Count - 1)
{ sql += ","; }
}
sql += ")";
//以上是为了拼接sql命令,你知道表结构的情况下直接写就好了,不用这么麻烦,注意使用参数化的命令
SQLiteConnection conn = new SQLiteConnection(connstring);
SQLiteTransaction trans=null;
try
{
conn.Open();
trans = conn.BeginTransaction();//使用事务
for(int i=0;i<dt.Rows.Count;i++)
{
SQLiteCommand cmd = new SQLiteCommand(sql, conn);
for(int j=0;j<dt.Columns.Count;j++)
{
cmd.Parameters.AddWithValue("@" + j, dt.Rows[i][j]);//为sql参数赋值
}
cmd.ExecuteNonQuery();
}
trans.Commit();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
trans.Rollback();
}
finally
{
if (conn.State != ConnectionState.Closed)
conn.Close();
}
}
}
}

代码未经测试,出错了的话贴上来。
还有一个导出EXCEL的就不写了,无非也就是从sqlite检索得到datatable,然后把datatable写入到excel,也就类似上面两个函数了。你可以把EXCEL当成一个数据库用OLEDB去读写。

大神,谢谢,刚出差回来,上午看您的代码,如果可以,直接结贴了!
谢谢![/quote]
FainSheeg 2018-05-24
  • 打赏
  • 举报
回复
string connstring = "Provider=MySQLProv;Data Source=数据库实例地址;User Id=登录用户名;Password=密码;"; //mysql数据库的连接字符串
FainSheeg 2018-05-24
  • 打赏
  • 举报
回复
就是不愿意自己去百度一下,Mysql数据库的连接字符串是类似这样的格式 的:Provider=MySQLProv;Data Source=mydb;User Id=myUsername;Password=myPassword; 你自己根据情况修改一下值。 https://jingyan.baidu.com/article/22a299b51d22d59e19376a0d.html
  • 打赏
  • 举报
回复
引用 47 楼 jinting2010 的回复:
写个网页吧,用npoi生成excel,合适一点吧,为什么要写客户端
谢谢大神的回复! 公司要求,我也没办法,我也很绝望啊!
  • 打赏
  • 举报
回复
引用 46 楼 yangliu0512 的回复:

using System;
using System.Data.OleDb;
using System.Data;
using System.Data.SQLite;

namespace WindowsFormsApp1
{
    class Class1
    {
        //从mysql数据库获取数据
        public DataTable getDataTable(string sql)
        {
            string connstring = "";  //mysql数据库的连接字符串
            OleDbConnection conn = new OleDbConnection(connstring);
            OleDbCommand cmd = new OleDbCommand(sql, conn);
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            return dt;
        }

        //将数据写入sqlite
        public void insertData(DataTable dt)
        {
            string connstring = "";  //sqlite数据库的连接字符串
           
            //这里假设你的sqlite数据库跟mysql数据库结构一样
            string sql = "insert into tablename(";
            for(int i=0; i<dt.Columns.Count;i++)
            {
                sql += dt.Columns[i].ColumnName;
                if (i != dt.Columns.Count - 1) 
                { sql += ","; }
            }
            sql += ") values(";
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                sql += "@V"+i;
                if (i != dt.Columns.Count - 1)
                { sql += ","; }
            }
            sql += ")";
            //以上是为了拼接sql命令,你知道表结构的情况下直接写就好了,不用这么麻烦,注意使用参数化的命令
            SQLiteConnection conn = new SQLiteConnection(connstring);
            SQLiteTransaction trans=null;
            try
            {
                conn.Open();
                trans = conn.BeginTransaction();//使用事务
                for(int i=0;i<dt.Rows.Count;i++)
                {
                    SQLiteCommand cmd = new SQLiteCommand(sql, conn);
                    for(int j=0;j<dt.Columns.Count;j++)
                    {
                        cmd.Parameters.AddWithValue("@" + j, dt.Rows[i][j]);//为sql参数赋值
                    }
                    cmd.ExecuteNonQuery();
                }
                trans.Commit();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                trans.Rollback();
            }
            finally
            {
                if (conn.State != ConnectionState.Closed)
                    conn.Close();
            }
        }
    }
}
代码未经测试,出错了的话贴上来。 还有一个导出EXCEL的就不写了,无非也就是从sqlite检索得到datatable,然后把datatable写入到excel,也就类似上面两个函数了。你可以把EXCEL当成一个数据库用OLEDB去读写。
大神,谢谢,刚出差回来,上午看您的代码,如果可以,直接结贴了! 谢谢!
jinting2010 2018-05-16
  • 打赏
  • 举报
回复
写个网页吧,用npoi生成excel,合适一点吧,为什么要写客户端
FainSheeg 2018-05-15
  • 打赏
  • 举报
回复

using System;
using System.Data.OleDb;
using System.Data;
using System.Data.SQLite;

namespace WindowsFormsApp1
{
    class Class1
    {
        //从mysql数据库获取数据
        public DataTable getDataTable(string sql)
        {
            string connstring = "";  //mysql数据库的连接字符串
            OleDbConnection conn = new OleDbConnection(connstring);
            OleDbCommand cmd = new OleDbCommand(sql, conn);
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            return dt;
        }

        //将数据写入sqlite
        public void insertData(DataTable dt)
        {
            string connstring = "";  //sqlite数据库的连接字符串
           
            //这里假设你的sqlite数据库跟mysql数据库结构一样
            string sql = "insert into tablename(";
            for(int i=0; i<dt.Columns.Count;i++)
            {
                sql += dt.Columns[i].ColumnName;
                if (i != dt.Columns.Count - 1) 
                { sql += ","; }
            }
            sql += ") values(";
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                sql += "@V"+i;
                if (i != dt.Columns.Count - 1)
                { sql += ","; }
            }
            sql += ")";
            //以上是为了拼接sql命令,你知道表结构的情况下直接写就好了,不用这么麻烦,注意使用参数化的命令
            SQLiteConnection conn = new SQLiteConnection(connstring);
            SQLiteTransaction trans=null;
            try
            {
                conn.Open();
                trans = conn.BeginTransaction();//使用事务
                for(int i=0;i<dt.Rows.Count;i++)
                {
                    SQLiteCommand cmd = new SQLiteCommand(sql, conn);
                    for(int j=0;j<dt.Columns.Count;j++)
                    {
                        cmd.Parameters.AddWithValue("@" + j, dt.Rows[i][j]);//为sql参数赋值
                    }
                    cmd.ExecuteNonQuery();
                }
                trans.Commit();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                trans.Rollback();
            }
            finally
            {
                if (conn.State != ConnectionState.Closed)
                    conn.Close();
            }
        }
    }
}
代码未经测试,出错了的话贴上来。 还有一个导出EXCEL的就不写了,无非也就是从sqlite检索得到datatable,然后把datatable写入到excel,也就类似上面两个函数了。你可以把EXCEL当成一个数据库用OLEDB去读写。
FainSheeg 2018-05-14
  • 打赏
  • 举报
回复
引用 42 楼 xuzuning 的回复:
那你就说说你会做什么吧 完全通用的代码是没有的,都是需要根据实际应用场景做些修改的 1、从远程 MySQL 中读取最新数据到 DataTable,你会吗? 2、将 DataTable 中的数据插入到 SQLite,你会吗? 3、C# 的定时器会使用吗? 都会,那你已经完成了 不会,那就去学会,没钱买奶粉,那只有认命了
版主大大果然简单直接,直达重点。看了这么多回复,很明显,楼主啥都不会,虽然不明白他们老板为什么要这么想不开把项目交给一个完全不懂的人。但是既然涉及到奶粉钱这么神圣的东西了教一个什么都不会的人,显然直接点好。
  • 打赏
  • 举报
回复
引用 44 楼 yangliu0512 的回复:
[quote=引用 42 楼 xuzuning 的回复:] 那你就说说你会做什么吧 完全通用的代码是没有的,都是需要根据实际应用场景做些修改的 1、从远程 MySQL 中读取最新数据到 DataTable,你会吗? 2、将 DataTable 中的数据插入到 SQLite,你会吗? 3、C# 的定时器会使用吗? 都会,那你已经完成了 不会,那就去学会,没钱买奶粉,那只有认命了
版主大大果然简单直接,直达重点。看了这么多回复,很明显,楼主啥都不会,虽然不明白他们老板为什么要这么想不开把项目交给一个完全不懂的人。但是既然涉及到奶粉钱这么神圣的东西了教一个什么都不会的人,显然直接点好。[/quote] 谢谢您的答复! 您的答复对我也是直达要害啊,对目前做的项目确实是七窍通了六窍,如果说真的要有点基础的,只能说对C#语言有所了解,但.NET真心不知道了!来到公司才开始接触的,发现和之前学的完全对不上号,只能是重新开始从基础学起! 所以各路大神,最好的解答就是直接点!
xuzuning 2018-05-13
  • 打赏
  • 举报
回复
那你就说说你会做什么吧 完全通用的代码是没有的,都是需要根据实际应用场景做些修改的 1、从远程 MySQL 中读取最新数据到 DataTable,你会吗? 2、将 DataTable 中的数据插入到 SQLite,你会吗? 3、C# 的定时器会使用吗? 都会,那你已经完成了 不会,那就去学会,没钱买奶粉,那只有认命了
  • 打赏
  • 举报
回复
引用 35 楼 sxl514286339 的回复:
[quote=引用 31 楼 Dmhl_max 的回复:] [quote=引用 28 楼 sxl514286339 的回复:] http://www.cnblogs.com/shuxiaolong/p/20140815_001.html 自己下载程序,这个程序 迁移数据的原理: > 生成源代码 【你可以修改】 > 调用编译,执行编译后的程序。
引用 29 楼 sxl514286339 的回复:
目前支持 MySql SQLServer SQLite —— 自动建库建表,保留自增列。
谢谢大神! 您说的这个东东,是需要在在哪里运行?客户端电脑上么?还是服务器上? [/quote] 运行 exe 后,你可以在 Temp 文件夹 找到源码 —— 在 哪里运行,你修改源码,自己决定。[/quote] 大神,您好,您给的工具我试了下,应该可以解决我的问题,但我对数据库这块很不熟悉,一直设置不对,连加载这步都过不去,希望得到您的帮助!谢谢!
  • 打赏
  • 举报
回复
引用 42 楼 xuzuning 的回复:
那你就说说你会做什么吧 完全通用的代码是没有的,都是需要根据实际应用场景做些修改的 1、从远程 MySQL 中读取最新数据到 DataTable,你会吗? 2、将 DataTable 中的数据插入到 SQLite,你会吗? 3、C# 的定时器会使用吗? 都会,那你已经完成了 不会,那就去学会,没钱买奶粉,那只有认命了
谢谢大神您的回复! 您的回复让我思路清晰了很多。 我会一一的去查询,学习,掌握。
  • 打赏
  • 举报
回复
引用 39 楼 xuzuning 的回复:
安装版和绿色版功能是一模一样的,只是启动方式不同。我自己用的就是绿色版的,可放在 U盘 里带着跑 同步功能只是一个配置文件,你应该先认真阅读手册(MySQL用户手册)
谢谢大神费神! 老板要求客户只需要装本客户端,其他的一切行为都不要! 我很想去学习下,但现在时间不允许,我只能是尽量做出成品来,最基本达到一定效果,那样我就可以继续有环境和时间让我做了!
xuzuning 2018-05-11
  • 打赏
  • 举报
回复
安装版和绿色版功能是一模一样的,只是启动方式不同。我自己用的就是绿色版的,可放在 U盘 里带着跑 同步功能只是一个配置文件,你应该先认真阅读手册(MySQL用户手册)
  • 打赏
  • 举报
回复
引用 35 楼 sxl514286339 的回复:
[quote=引用 31 楼 Dmhl_max 的回复:] [quote=引用 28 楼 sxl514286339 的回复:] http://www.cnblogs.com/shuxiaolong/p/20140815_001.html 自己下载程序,这个程序 迁移数据的原理: > 生成源代码 【你可以修改】 > 调用编译,执行编译后的程序。
引用 29 楼 sxl514286339 的回复:
目前支持 MySql SQLServer SQLite —— 自动建库建表,保留自增列。
谢谢大神! 您说的这个东东,是需要在在哪里运行?客户端电脑上么?还是服务器上? [/quote] 运行 exe 后,你可以在 Temp 文件夹 找到源码 —— 在 哪里运行,你修改源码,自己决定。[/quote] 谢谢大神,我这就试下!
  • 打赏
  • 举报
回复
引用 36 楼 xuzuning 的回复:
1、MySQL 有不需要安装的绿色版,只需 start 命令启动服务和 tskill 命令关闭服务 2、MySQL 本身提供有远程数据同步功能 3、MySQL 同时提供有直接将数据库导出到客户端本地的功能 你实际上是在实现某个数据备份策略 如果是在备份数据上实现查询,显然是有缺陷的,查询的结果通常是残缺的(缺少最新内容) 如果对实时性不敏感的话,也是可以在本地缓存数据的,但绝不是原始数据,而是查询结果(比如股市每秒都在变化,但技术分析指标却都是建立在5分钟线或日线上的)
谢谢大神费神回复! 提前说明,如果我哪个问题问的有点缺了,希望您不要生气。 1、您说的有绿色版的,直接可以用C#命令就可以控制么?在下载数据,同步数据方面和正常的一样的么? 2、同样,MYSQL自带的同步数据功能直接可以用代码实现么?有会比较麻烦么?或是您可以帮我打个样儿么? 3、因为项目一个月可以产生近30W条的数据,对下载时候的实时数据要求应该没有那么严格,但在客户端显示的时候就需要了,不过这个功能,前辈的代码基本已经实现了,所以不做要求,我慢慢学。现在就是先做到数据同步,然后下载的时候可以更快,更稳定,不那么依赖网络。
xuzuning 2018-05-11
  • 打赏
  • 举报
回复
1、MySQL 有不需要安装的绿色版,只需 start 命令启动服务和 tskill 命令关闭服务 2、MySQL 本身提供有远程数据同步功能 3、MySQL 同时提供有直接将数据库导出到客户端本地的功能 你实际上是在实现某个数据备份策略 如果是在备份数据上实现查询,显然是有缺陷的,查询的结果通常是残缺的(缺少最新内容) 如果对实时性不敏感的话,也是可以在本地缓存数据的,但绝不是原始数据,而是查询结果(比如股市每秒都在变化,但技术分析指标却都是建立在5分钟线或日线上的)
吹风的兔子 2018-05-11
  • 打赏
  • 举报
回复
引用 31 楼 Dmhl_max 的回复:
[quote=引用 28 楼 sxl514286339 的回复:] http://www.cnblogs.com/shuxiaolong/p/20140815_001.html 自己下载程序,这个程序 迁移数据的原理: > 生成源代码 【你可以修改】 > 调用编译,执行编译后的程序。
引用 29 楼 sxl514286339 的回复:
目前支持 MySql SQLServer SQLite —— 自动建库建表,保留自增列。
谢谢大神! 您说的这个东东,是需要在在哪里运行?客户端电脑上么?还是服务器上? [/quote] 运行 exe 后,你可以在 Temp 文件夹 找到源码 —— 在 哪里运行,你修改源码,自己决定。
  • 打赏
  • 举报
回复
通灵之术:召唤大神!
加载更多回复(33)

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧