版权声明:本文为搜集借鉴各类文章的原创文章,转载请注明出处:http://www.cnblogs.com/2186009311CFF/p/6382623.html

C#(.net)实现用apache activemq传递SQLite的数据:

本测试适用于Windows32位,VS2010的.net 4.0框架。

一、C#连接SQLite:

对于C#连接SQLite的内容,请查看我的另一篇随笔:http://www.cnblogs.com/2186009311CFF/p/6270467.html(从“二、后台与SQLite数据库连接:”开始看),不同之处如下:

1、那篇文章的连接方式是B/S下的连接数据库方式,但在C/S下有所不同,具体如下:

注意:这两种方法,都需要自己把数据库文件拷贝至相应文件夹,只是放的位置不同:绝对路径在固定的目录,相对路径在安装目录下

1)用绝对路径:

  1. static readonly static string strconn= "Data Source=C:/DB/Test.db";

2)用相对路径:

  1. private readonly static string strconn = "Data Source="+Application.StartupPath+"../Test.db;Version=3;";

如果提示错误“attempt to write a readonly database”,则需数据库文件所在文件夹(即C:/DB或安装目录)的文件夹权限(属性——>安全……)

2、那篇文章的ashx文件内容与C/S下的类似,只是在C/S下,我用cs文件替代了ashx文件,主要内容如下:

查询的:

  1. public static DataTable GetDataTable(string strSQL)//"Select * From ProductionCycleData"
  2. {
  3. DataTable dt = new DataTable();
  4. DataSet ds = new DataSet();
  5. using (SQLiteConnection conn = new SQLiteConnection(strconn))
  6. {
  7. //创建sqlite命令
  8. using (SQLiteCommand comm = conn.CreateCommand())
  9. {
  10. //打开数据库链接
  11. conn.Open();
  12. //select数据分页用limit就行,很方便
  13. comm.CommandText = strSQL;
  14. using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(comm))
  15. {
  16. adapter.SelectCommand = comm;
  17. adapter.Fill(ds);
  18. }
  19. // DataTable dt = new DataTable();
  20. dt = ds.Tables[0];
  21. }
  22. }
  23. return dt;
  24. }

修改(@"UPDATE ProductionCycleData SET PDOCode = '盗贼' WHERE ShotType = 604610"),

删除(@"DELETE FROM ProductionCycleData"),

添加(@"INSERT INTO ProductionCycleData VALUES (1,"abc")")

  1. public static void ExecuteSQLiteCommandSQL(string strSQL)
  2. {
  3. using (SQLiteConnection con = new SQLiteConnection(SQLiteHelper.strconn))
  4. {
  5. con.Open();
  6. using (SQLiteCommand cmd = new SQLiteCommand(strSQL, con))
  7. {
  8. cmd.ExecuteNonQuery();
  9. }
  10. }
  11. }

  

可参考: http://www.cnblogs.com/teroy/p/3960760.html

其实我测试时有小插曲,我用相当于bin目录的相对路径:private readonly static string strconn = "Data Source=../../..//DB/Test.db;Version=3;";调试是可以查询和删除成功的,但是安装后就不成功了,应该是安装后找不到路径了,具体我也不清楚。

二、用Apache ActiveMQ传递信息

1、首先具备java环境,去Oracle官网下载适合本电脑的JDK或者JRE安装,下载链接: http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html#javasejdk   (不知以后会不会失效,总之去官网找吧,现在是免费的)

2、去Apache ActiveMQ官网下载文件

源文件: http://activemq.apache.org/activemq-5143-release.html

运行解压后的apache-activemq-5.14.3-bin\apache-activemq-5.14.3\bin\win32\activemq.bat文件(我的测试电脑是32位,故选择Win32下的bat文件运行),出现如图所示,则表明Apache ActiveMQ可以发送和接收数据了

.net下所需的dll,我用到的是Sub Projects下的NMS:http://www.apache.org/dyn/closer.lua/activemq/apache-nms/1.7.0/Apache.NMS.ActiveMQ-1.7.2-bin.zip

引用解压文件里的.net 4.0下的Apache.NMS、Apache.NMS.ActiveMQ、Ionic.Zlib的dll

3、前期准备:

监控队列发送信息情况:打开浏览器输入 http://localhost:8161/admin/ ,用账户:admin和密码:admin登录。这是默认的,可在前面“1、”中的解压文件conf文件夹下的jetty.xml和jetty-realm.properties中,进行相应的更改,步骤如下:

1)jetty.xml中true变false;

2)jetty-realm.properties中,按用户名:密码,角色的顺序排列,按照所需进行更改保存

可参考:http://blog.csdn.net/stevenprime/article/details/7091224

成功登录后,呈现界面:

点击Queues,如若有信息发送成功,则会显示,如图所示:

若需查看具体发送的内容,则只需点击对应的Queues Name(如test):

出现:

点击对应的Message ID,出现该信息名的详细发送内容(往下翻):

4、C#控制,发送信息给Apache ActiveMQ

可参考:http://www.cnblogs.com/woxpp/p/5001373.html(这个真的很好)、http://blog.csdn.net/proglovercn/article/details/51592884(这个也不错)

1)查看“1、”下的解压文件conf目录下的文件:

credentials.properties文件,查看activemq.username、activemq.password

activemq.xml文件,查看串口号

2)C#代码,发送信息

  1. private static string strActivemMQusername = "system";
  2. private static string strActivemMQpassword = "manager";
  3. private static string strPort = "61616";
  4. public static void SendMessage(string strSendQueueName, string strSendIP, string strSendMessage)
  5. {
  6. String QueuesNameESF = "queue://" + strSendQueueName;
  7. Uri _uri = new Uri(String.Concat("activemq:tcp://" + strSendIP + ":" + strPort));
  8. IConnectionFactory factory = new ConnectionFactory(_uri);
  9. using (IConnection conn = factory.CreateConnection(strActivemMQusername, strActivemMQpassword))
  10. {
  11. using (ISession session = conn.CreateSession())
  12. {
  13. IDestination destination = SessionUtil.GetDestination(session, QueuesNameESF);
  14. using (IMessageProducer producer = session.CreateProducer(destination))
  15. {
  16. conn.Start();
  17. //可以写入字符串,也可以是一个xml字符串等
  18. ITextMessage request = session.CreateTextMessage(strSendMessage);
  19. producer.Send(request);
  20.  
  21. }
  22. }
  23. }
  24. }

运行过后,可在http://localhost:8161/admin/查看信息发送情况。

参考:http://www.cnblogs.com/diorlv/p/3328712.html  、http://www.cnblogs.com/madyina/p/4121458.html

3)接收Apache ActiveMQ的消息:

  1. public static void ReceMessage(string strReceQueueName, string strReceIP, ref DataTable dtReceMessage)
  2. {
  3.  
  4. String QueuesNameESF = "queue://" + strReceQueueName;
  5. Uri _uri = new Uri(String.Concat("activemq:tcp://" + strReceIP + ":" + strPort + "?wireFormat.maxInactivityDuration=0"));
  6. IConnectionFactory factory = new ConnectionFactory(_uri);
  7. using (IConnection conn = factory.CreateConnection(strActivemMQusername, strActivemMQpassword))
  8. {
  9. using (ISession session = conn.CreateSession())
  10. {
  11. conn.Start();
  12. IDestination destination = SessionUtil.GetDestination(session, QueuesNameESF);
  13. using (IMessageConsumer consumer = session.CreateConsumer(destination))
  14. {
  15. ITextMessage message = consumer.Receive() as ITextMessage;
  16.  
  17. string strReceMessage = message.Text;
  18. dtReceMessage = XMLHelper.HuaGeConvertXmlToDataTable(strReceMessage);
  19.  
  20. }
  21. }
  22. }
  23. }

  此处接收XML文件字符串,并把其转化成DateTable形式接收。

但以上的接收和发送有不足,发送是同一消息名接收多多信息,但接收只能接收同一消息名的第一条信息,这种是不适用实际情况的,我还在考虑如何删除,静待完善。。。呵呵。

本人处于初期探索阶段,对于消息是否发送成功的判断,和一对多,多对一的处理,还有程序删除队列消息等问题,有待学习,希望这些能够帮助到你。

如有不足之处,请谅解,并留言,谢谢!

C#(.net)实现用apache activemq传递SQLite的数据的更多相关文章

  1. apache activemq 学习笔记

    0.activemq的概念 activemq实现了jms(java Message server),用于接收,发送,处理消息的开源消息总线. 1.activemq和jms的区别 jms说白了就是jav ...

  2. Apache ActiveMQ实战(1)-基本安装配置与消息类型

    ActiveMQ简介 ActiveMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的.可扩展的.稳定的和安全的企业级消息通信.ActiveMQ使用Apache ...

  3. 消息队列MQ - Apache ActiveMQ

    Apache ActiveMQ是Apache软件基金会所研发的开放源码消息中间件:由于ActiveMQ是一个纯Jave程式,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行. 1.que ...

  4. Apache ActiveMQの版本更迭和Apache ActiveMQの故障转移

    本文描述apache activemq 版本更迭的原因以及Apache ActiveMQのThe Failover Transport new features in 5.2.0  1.对信息的传输/ ...

  5. apache activemq的重连

    1.activemq的重连机制 maxReconnectAttempts -1 | 0 From version 5.6 onwards: -1 is default and means retry ...

  6. How to Setup Replicated LevelDB Persistence in Apache ActiveMQ 5.9--转载

    原文地址:https://simplesassim.wordpress.com/2013/11/03/how-to-setup-replicated-leveldb-persistence-in-ap ...

  7. Apache ActiveMQ消息中间件的基本使用

    Apache ActiveMQ是Apache软件基金会所研发的开放源码消息中间件:由于ActiveMQ是一个纯Java程式,因此只需要操作系统支援Java虚拟机,ActiveMQ便可执行. 支持Jav ...

  8. Apache ActiveMQ实战(2)-集群

    ActiveMQ的集群 内嵌代理所引发的问题: 消息过载 管理混乱 如何解决这些问题--集群的两种方式: Master slave Broker clusters ActiveMQ的集群有两种方式: ...

  9. Linux下apache activemq的安装与配置

    ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范 的 JMS Provider实现,尽管JMS规范出台已经是很 ...

随机推荐

  1. window.screenLeft&&window.screenTop&&window.screenX&&window.screenY

    http://blog.sina.com.cn/s/blog_14e2a237b0102w4i0.html window.screenLeft&&window.screenTop&am ...

  2. 你知道e.g.和i.e.的区别吗?

    见 i.e. 是对前面的完全举例,特指 e.g. 则是不完全举例,有可能是...也有可能是...还可能是其他. 注意,i.e. 和 e.g. 第二个点后面都常跟一个逗号.

  3. ESP32 Ethernet to wifi

    参考网址 https://github.com/espressif/esp-iot-solution/tree/master/examples/eth2wifi RMII PHY Wiring(RMI ...

  4. Spring Boot 深度调优,6得飞起~

    项目调优 作为一名工程师,项目调优这事,是必须得熟练掌握的事情. 在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行. 一.修改配置文件 关于修改配置文件applicati ...

  5. 数位dp相关

    经典的数位Dp是要求统计符合限制的数字的个数. 一般的形式是:求区间[n,m]满足限制f(1). f(2). f(3)等等的数字的数量是多少. 条件 f(i) 一般与数的大小无关,而与数的组成有关. ...

  6. 搜索专题: HDU1027Ignatius and the Princess II

    Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ( ...

  7. 一分钟搭建 Web 版的 PHP 代码调试利器

    一.背景   俗话说:"工欲善其事,必先利其器".作为一门程序员,我们在工作中,经常需要调试某一片段的代码,但是又不想打开繁重的 IDE (代码编辑器).使用在线工具调试代码有时有 ...

  8. markdown编辑器学习

    markdown是一块文本编辑器,属于纯文本文件,可以使用任何编辑器打开.对于写作来说是一个好帮手,它的好处有很多,比如可以直接转成html,制作电子书等.今天开始学习一下这个神奇的编辑器.从今天起把 ...

  9. 如何让css隐藏滚动条 兼容谷歌、火狐、IE等各个浏览器

    项目中,页面效果需要展示一个页面的移动端效果,使用的是一个苹果手机样式背景图,咋也没用过苹果,咋也不敢形容. 如下图所示: 在谷歌浏览器如图一滚动条顺利隐藏,但是火狐就如图二了,有了滚动条丑的一批. ...

  10. 2019-11-22-Roslyn-在多开发框架让-msbuild-的-Target-仅运行一次

    title author date CreateTime categories Roslyn 在多开发框架让 msbuild 的 Target 仅运行一次 lindexi 2019-11-22 09: ...