打印和数据库操作同步进行??

xiaowangtian1117 2006-07-13 03:25:45
打印和数据库插入操作同步进行,当一个事情有误后另一个事情回滚。
在一个应用程序中,首先向数据库中插入一笔数据,然后把此数据打印出来,但是如果在打印时出现问题,则把原来操作回滚,也就是删除刚才插入的数据。
...全文
290 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Knight94 2006-07-14
  • 打赏
  • 举报
回复
to 我在打印时用打印机厂家提供的动态链接库,他们提供打印是否成功!

如果这样的话,大致流程如下:

1、通过connection创建transaction,把它付给command,并设置command的timeout足够大;
2、通过command执行插入操作,但不提交transaction;
3、打印当前的插入数据;
4、通过打印返回值来判断是否需要提交transaction。
xiaowangtian1117 2006-07-14
  • 打赏
  • 举报
回复
errorMessage=null;
SqlTransaction trans=null;
SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
try
{
SqlCommand cmd=new SqlCommand();
cmd.Connection=conn;
cmd.CommandText="Insert_AutoSell";
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add("@AUTO_VINCODE",SqlDbType.NVarChar);
cmd.Parameters.Add("@AUTO_STYLE",SqlDbType.Int);
cmd.Parameters.Add("@AUTO_YEAR",SqlDbType.Int);
cmd.Parameters["@AUTO_VINCODE"].Value = VINM_Biz.AutoVin;
cmd.Parameters["@AUTO_STYLE"].Value = VINM_Biz.AutoStyleID;
cmd.Parameters["@AUTO_YEAR"].Value = VINM_Biz.AutoYear;
conn.Open();
trans=conn.BeginTransaction();
cmd.Transaction=trans;
cmd.ExecuteNonQuery();
打印模块。。。。
trans.Commit();
conn.Close();
return true;
}
catch(Exception se)
{
errorMessage=se.Message;
trans.Rollback();
conn.Close();
return false;
}
以上是我写的代码,请高手帮忙看一些有什么问题?自己测试基本成功!
hertcloud 2006-07-14
  • 打赏
  • 举报
回复
这个 根本不现实

比如你 已经打了 一行
我是一个中国人
而数据库这行再你刚打印完后 被 更新为 “我是一个老外”
你难道能叫打印机 给你把 前面的一行涂白了
重新打过。。。。。。。。。。。。。
xiaowangtian1117 2006-07-14
  • 打赏
  • 举报
回复
我在打印时用打印机厂家提供的动态链接库,他们提供打印是否成功!
Knight94 2006-07-14
  • 打赏
  • 举报
回复
to 在对数据库操作时用事务可不可以实现我的要求?

可以
Knight94 2006-07-14
  • 打赏
  • 举报
回复
to 在一个应用程序中,首先向数据库中插入一笔数据,然后把此数据打印出来,但是如果在打印时出现问题,则把原来操作回滚,也就是删除刚才插入的数据。

问题的难点在于,如何判断打印是否出现问题,例如使用网络打印机的时候,你无法判断打印错误。

除此外,其他都可以完成。
xiaowangtian1117 2006-07-14
  • 打赏
  • 举报
回复
谢谢!
Knight94 2006-07-14
  • 打赏
  • 举报
回复
没问题
xiaowangtian1117 2006-07-14
  • 打赏
  • 举报
回复
其他的应该没有问题了吧?谢谢指正!
Knight94 2006-07-14
  • 打赏
  • 举报
回复
to cmd.CommandTimeout=0;

我一般习惯为
cmd.CommandTimeout = 3600;
xiaowangtian1117 2006-07-14
  • 打赏
  • 举报
回复
值 0 指示无限制,在 CommandTimeout 中应避免值 0,否则会无限期地等待执行命令。
如果下面代码中加入cmd.CommandTimeout=0;,应该可以了吧?谢谢指正!
errorMessage=null;
SqlTransaction trans=null;
SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
try
{
SqlCommand cmd=new SqlCommand();
cmd.Connection=conn;
cmd.CommandTimeout=0;
cmd.CommandText="Insert_AutoSell";
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add("@AUTO_VINCODE",SqlDbType.NVarChar);
cmd.Parameters.Add("@AUTO_STYLE",SqlDbType.Int);
cmd.Parameters.Add("@AUTO_YEAR",SqlDbType.Int);
cmd.Parameters["@AUTO_VINCODE"].Value = VINM_Biz.AutoVin;
cmd.Parameters["@AUTO_STYLE"].Value = VINM_Biz.AutoStyleID;
cmd.Parameters["@AUTO_YEAR"].Value = VINM_Biz.AutoYear;
conn.Open();
trans=conn.BeginTransaction();
cmd.Transaction=trans;
cmd.ExecuteNonQuery();
打印模块。。。。
trans.Commit();
conn.Close();
return true;
}
catch(Exception se)
{
errorMessage=se.Message;
trans.Rollback();
conn.Close();
return false;
}
myminimouse 2006-07-13
  • 打赏
  • 举报
回复
up
kssys 2006-07-13
  • 打赏
  • 举报
回复
使用顽石宫主的方法是可以实现的。

把他的代码放入到Try Catch 块里面即可。
xiaowangtian1117 2006-07-13
  • 打赏
  • 举报
回复
有没有人知道用“phommy(顽石宫主) ”的办法:在对数据库操作时用事务可不可以实现我的要求?
xiaowangtian1117 2006-07-13
  • 打赏
  • 举报
回复
如果在打印后插入,当插入有问题时是不能撤销打印的!
kssys 2006-07-13
  • 打赏
  • 举报
回复
按照实际的逻辑,也是这样处理的。只有当一切都OK的情况下,才去书写记录
kssys 2006-07-13
  • 打赏
  • 举报
回复
你可以在打印成功后再插入
phommy 2006-07-13
  • 打赏
  • 举报
回复
前边加上 On Error Resume Next~
gConn=>conn
phommy 2006-07-13
  • 打赏
  • 举报
回复
conn.BeginTrans

gConn.Execute "insert into table (key,value) values (" & key & "," & value & ")"
If Err Then conn.RollbackTrans: Exit Sub

Set Printer = Printers(0)
Printer.Print "key=" & key
Printer.Print "value=" & value
Printer.EndDoc

If Err Then conn.RollbackTrans Else conn.CommitTrans
xiaowangtian1117 2006-07-13
  • 打赏
  • 举报
回复
我想到的是先插入记录并记录插入数据的ID,用try catch来判断打印是否异常,如果异常用数据ID号删掉记录。
加载更多回复(3)

110,571

社区成员

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

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

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