首页 > 学院 > 开发设计 > 正文

看我如何快速学习.Net(高可用数据采集平台)

2019-11-17 02:38:36
字体:
来源:转载
供稿:网友

看我如何快速学习.Net(高可用数据采集平台)

最近文章:高可用数据采集平台(如何玩转3门语言php+.net+aauto)、高并发数据采集的架构应用(Redis的应用)

项目文档:关键词匹配项目深入研究(二)- 分表思想的引入

吐槽:本人也是非常讨厌拿来主义的,有些培训每个细节都提到过,主管还找我要实际案例,而不是去安排合适的人去做这件事情,有点过于拿来主义了,有点担心。

好消息的是:高并发数据采集的架构应用(Redis的应用)团队已经实现了,不过有部分代码还是我写的,值得喝彩下,说明团队的能力还是不错的。

最近有时间,我也是用.net完成高可用数据采集平台(如何玩转3门语言php+.net+aauto)服务的编码工作。

正文开始

要想快速学习某一件事情,我们就得必须做好规划。

首先我们先来分析下要实现该项目需要哪些方面的技术,我们从哪里开始分析呢,当然有系统分析师帮你做啦!

所需的技术

1. Microsoft Studio 2010 IDE以及.Net Framework基础知识的了解

2. 如何利用C#创建服务,服务安装以及卸载

3. SQLite的基础应用以及C#如何使用SQLite

4. C#定时器的应用

5. C#的多线程应用以及线程池的应用

6. 操作系统信号量,互斥同步锁概念以及C#如何使用信号量、互斥同步锁

7. C#文件操作,ini配置文件读取技术

8. C# WEB API的调用,以及异步处理知识和C# TASK的了解应用

9. 数据传输解析技术,以及C#如何解析JSON

10. 其它常用应用,比如DataSet、DataTable、DataRow、Dictionary、List、KeyValuePair、String等

这些点看起来好恐怖,要想做好应用这些只是小小的一部分,但相对于菜鸟或者学生们就等于天书了,但是我只有一个星期的事情。

只要我们有目的去做事,任何事都不会有阻碍,废话少说,等下闲我啰嗦了。

1. Microsoft Studio 2010 IDE以及.Net Framework基础知识的了解

这点我竟然列为了重点,有些人有可能对这点不重视,但是我相信很多有经验的人都会同我一样非常重视这点。

Microsoft Studio 2010 IDE都不用说了,这个大家都是专家,我为什么会选择博客园写文章,是因为我在上学的时候看了一本博客园出版的书,讲的是设计模式的应用,觉得非常的不错,当时博客园是.Net技术平台的佼佼者。

Microsoft Studio 2010 IDE最主要的一点,就是选择框架,选择项目适合的框架。

.Net Framework 主要也是注意下为什么有那么多版本,了解下他们互相是否有关系,比如从2.0升到4.0是否能够平稳的过渡。

2. 如何利用C#创建服务,服务安装以及卸载

我也是看了一篇博客而学来的,非常不错,我也把地址贴出来:http://www.VEVb.com/aierong/archive/2012/05/28/2521409.html

我也是主要用了(a) 利用.net框架类ServiceBase,步骤参考上面博客的地址:安装的时候注意下选择好对应版本的installutil。

代码贴出来

public partial class MainService : ServiceBase    {        readonly System.Timers.Timer _timer_request;        readonly System.Timers.Timer _timer_upload;               WorkPRocess work = new WorkProcess(10);               public MainService()        {            InitializeComponent();            //install db table            TaskModel.install();            _timer_upload  = _timer_request = new System.Timers.Timer(5000)            {                AutoReset = true,                Enabled = true            };            _timer_request.Elapsed += delegate(object sender, ElapsedEventArgs e)            {                Logger.log("Start Request Data From Api");                try                {                    TaskResponse response = TaskFactory.createFromApi();                    TaskModel.save(response);                }                catch (Exception ex)                {                    Logger.error(ex.Message);                }                Logger.log("End Request Data From Api");            };            _timer_upload.Elapsed += delegate(object sender, ElapsedEventArgs e)            {                Logger.log("Start Upload Data To Api");                try                {                    if (!work.wait())                    {                        work.doing();                    }                }                catch (Exception ex)                {                    Logger.error(ex.Message);                }                Logger.log("End Upload Data To Api");                           };                 }        protected override void OnStart(string[] args)        {            _timer_request.Enabled = true;            _timer_upload.Enabled = true;          }        protected override void OnStop()        {            _timer_request.Enabled = false;            _timer_upload.Enabled = false;        }    }

3. SQLite的基础应用以及C#如何使用SQLite

也是一样,有博客就是好,推荐代码直接拷贝一份过来。http://www.VEVb.com/OnlyVersion/p/3746086.html

我也贴个相对精简的吧。

class DB    {        /// <summary>                /// 获得连接对象                /// </summary>             /// <returns>SQLiteConnection</returns>               public static SQLiteConnection GetSQLiteConnection(){            string str = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);            var con = new SQLiteConnection("Data Source=" + str + @"/" + "DataBase" + @"/" + "InfoServiceDb.db");            return con;              }        /// <summary>        /// 准备操作命令参数        /// </summary>        /// <param name="cmd">SQLiteCommand</param>        /// <param name="conn">SQLiteConnection</param>        /// <param name="cmdText">Sql命令文本</param>        /// <param name="data">参数数组</param>        private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, Dictionary<String, String> data)        {            if (conn.State != ConnectionState.Open)                conn.Open();            cmd.Parameters.Clear();            cmd.Connection = conn;            cmd.CommandText = cmdText;            cmd.CommandType = CommandType.Text;            cmd.CommandTimeout = 30;            if (data != null && data.Count >= 1)            {                foreach (KeyValuePair<String, String> val in data)                {                    cmd.Parameters.AddWithValue(val.Key, val.Value);                }            }        }        /// <summary>        /// 查询,返回DataSet        /// </summary>        /// <param name="cmdText">Sql命令文本</param>        /// <param name="data">参数数组</param>        /// <returns>DataSet</returns>        public static DataSet ExecuteDataset(string cmdText, Dictionary<string, string> data)        {            var ds = new DataSet();            using (SQLiteConnection connection = GetSQLiteConnection())            {                var command = new SQLiteCommand();                PrepareCommand(command, connection, cmdText, data);                var da = new SQLiteDataAdapter(command);                da.Fill(ds);            }            return ds;        }        /// <summary>        /// 查询,返回DataTable        /// </summary>        /// <param name="cmdText">Sql命令文本</param>        /// <param name="data">参数数组</param>        /// <returns>DataTable</returns>        public static DataTable ExecuteDataTable(string cmdText, Dictionary<string, string> data)        {            var dt = new DataTable();            using (SQLiteConnection connection = GetSQLiteConnection())            {                var command = new SQLiteCommand();                PrepareCommand(command, connection, cmdText, data);                SQLiteDataReader reader = command.ExecuteReader();                dt.Load(reader);            }            return dt;        }        /// <summary>        /// 返回一行数据        /// </summary>        /// <param name="cmdText">Sql命令文本</param>        /// <param name="data">参数数组</param>        /// <returns>DataRow</returns>        public static DataRow ExecuteDataRow(string cmdText, Dictionary<string, string> data)        {            DataSet ds = ExecuteDataset(cmdText, data);            if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)                return ds.Tables[0].Rows[0];            return null;        }        /// <summary>        /// 执行数据库操作        /// </summary>        /// <param name="cmdText">Sql命令文本</param>        /// <param name="data">传入的参数</param>        /// <returns>返回受影响的行数</returns>        public static int ExecuteNonQuery(string cmdText, Dictionary<string, string> data)        {            using (SQLiteConnection connection = GetSQLiteConnection())            {                var command = new SQLiteCommand();                PrepareCommand(command, connection, cmdText, data);                return command.ExecuteNonQuery();            }        }        /// <summary>        /// 返回SqlDataReader对象        /// </
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表