MessageQueue myQueue = new MessageQueue(".\\private$\\myQueue1");
myQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
if (myQueue.Transactional)
{
MessageQueueTransaction myTransaction = new MessageQueueTransaction();
try
{
//启动事务
myTransaction.Begin();
//从队列中接收消息
System.Messaging.Message myMessage = myQueue.Receive(myTransaction);
SqlConnection conn = new SqlConnection("Data Source=THTFCOMPUTER\\MSSQLSERVER1;Initial Catalog=test;Integrated Security=True;User Id=sa; Password=sa;");
SqlCommand cmd = new SqlCommand();
string sql = myMessage.Label;
cmd.CommandText = sql;
cmd.Connection = conn;
conn.Open(); cmd.ExecuteNonQuery();
conn.Close();
myTransaction.Commit();
}
catch
{
myTransaction.Abort();
}
}
这样写有什么问题么?执行的时候只提取消息队列中第一条消息后就不继续执行了,如果提取消息成功,执行的过程中出错,如何回滚出错的那条消息?
myQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
if (myQueue.Transactional)
{
MessageQueueTransaction myTransaction = new MessageQueueTransaction();
try
{
//启动事务
myTransaction.Begin();
//从队列中接收消息
System.Messaging.Message myMessage = myQueue.Receive(myTransaction);
SqlConnection conn = new SqlConnection("Data Source=THTFCOMPUTER\\MSSQLSERVER1;Initial Catalog=test;Integrated Security=True;User Id=sa; Password=sa;");
SqlCommand cmd = new SqlCommand();
string sql = myMessage.Label;
cmd.CommandText = sql;
cmd.Connection = conn;
conn.Open(); cmd.ExecuteNonQuery();
conn.Close();
myTransaction.Commit();
}
catch
{
myTransaction.Abort();
}
}
这样写有什么问题么?执行的时候只提取消息队列中第一条消息后就不继续执行了,如果提取消息成功,执行的过程中出错,如何回滚出错的那条消息?
解决方案 »
- ftp断点续传!!!
- 学程序前的分析
- 正则表达式匹配将Administrator,yang,Domain Admins,ray中不是Administrator并且不是Domain Admins的匹配出来!
- c#windows窗体小问题
- 下拉列表 中 如何默认选中的就是当前的系统时间 年份 和月份
- C#中如何引用控件啊??
- Visual Studio .NET IDE 转到定义的快捷键是什么?
- CSDN太迟钝了,64位windows发布了都不报到!可惜呀!
- 【请问】怎样禁用form右上角的关闭按钮?
- 哪里有.Net框架类的继承关系图?
- XML序列化反序列化
- [初学者求教]AspNetPager对gridview分页问题
MessageQueueTransaction transaction = new MessageQueueTransaction(); try
{
queue.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) }); ;
int len = queue.GetAllMessages().Length;
// Receive message, 同步的Receive方法阻塞当前执行线程,直到一个message可以得到
while (len > 0)
{
if (queue.Transactional)
transaction.Begin();
System.Messaging.Message message = queue.Receive(new TimeSpan(0), transaction); SqlConnection conn = new SqlConnection("Data Source=THTFCOMPUTER\\MSSQLSERVER1;Initial Catalog=test;Integrated Security=True;User Id=sa; Password=sa;");
SqlCommand cmd = new SqlCommand();
string sql = message.Body.ToString();
cmd.CommandText = sql;
cmd.Connection = conn;
conn.Open(); cmd.ExecuteNonQuery();
conn.Close(); // 如果消息队列采用了事务,则停止事务
if (queue.Transactional)
{
transaction.Commit();
len--;
}
}
}
catch
{
if (queue.Transactional)
transaction.Abort();
}
finally
{
queue.Close();
queue.Dispose();
}