哎。网上也有一个SqlScope,但和我这个是两个东西。。
解决方案 »
- 用什么方法可以利用显卡进行运算?
- 如何在 C# 中获取其他进程中调用 DLL 的内存基址
- 关于导出系统中图标的分辨率
- 求助 如何根据dataset在数据库里面自动生成表
- C#中运用MD5需要添加什么项目引用?
- 谁能拯救她?
- CheckBox的问题,在线给分
- C# 如何调用命令在外部打开csv文件?
- C#中怎样可以把System.Type转为SqlDbType???
- C#控制台做ATM,SQLserver表已经创建好了,在vs2010代码里面写SQL语句时,该怎么写?我思路现在蛮混乱
- 用ASP.NET编写的网站为什么总是跳出“无法找到脚本库”的提示???
- 如和在VC#里添加可以带图片的按钮控件?
不知道这写法好不好?
public delegate EventOnReader(object object ,SqlDataReader reader);
public class DataAccess
{
public event EventOnReader OnReader;
public void SqlReader(string strSql)
{
SqlConnection myConn = new SqlConnection(ConnString);
SqlCommand comm = new SqlComamnd(strSql,myConn);
SqlDataReader dr = comm.cmd.ExecuteReader()
if(OnReader != null)
{
OnReader(this,dr)
}
dr.Close();
myConn.Close();
}
}
发生事务回滚,请大家帮我看看怎么回事,不胜感激,回言请发到我邮箱([email protected])ISqlScope sqlscope=new SqlScopeImpl(ConnectString);
using(sqlscope.BeginTransaction())
{
try
{
MaxProduceID=sqlscope.ExecuteString("Select number From T_LastNumber Where ID=@p0","001").Trim();
DataRow r1=sqlscope.ExecuteDataRow("Select number,re From T_LastNumber Where ID=@p0","002");
MaxGateID=r1[1].ToString().Trim() + r1[0].ToString().Trim();
temp1=(int.Parse(MaxProduceID.Trim())+1).ToString().Trim();
temp2=(int.Parse(r1[0].ToString().Trim())+1).ToString().Trim(); for(i=temp1.Length;i<MaxProduceID.Trim().Length;i++)
{
temp1="0"+temp1;
} for(i=temp2.Length;i<r1[0].ToString().Trim().Length;i++)
{
temp2="0"+temp2;
} sqlscope.ExecuteNonQuery("UPDATE T_LastNumber SET number=@p1 WHERE id=@p0","001",temp1);
sqlscope.ExecuteNonQuery("UPDATE T_LastNumber SET number=@p1 WHERE id=@p0","002",temp2);
lastid=sqlscope.ExecuteInt32(@"INSERT T_test(ClientID,GoodsID) VALUES (@p0,@p1) SELECT SCOPE_IDENTITY()",MaxProduceID,MaxGateID);
Sql="insert T_test2(id,flag,number,Total) values(@p0,@p1,@p2,@p3)";
for(i=0;i<4;i++)
{
if(tempstr1[i,0].Trim()!="")
{
sqlscope.ExecuteNonQuery(Sql,lastid,tempstr1[i,0],tempstr1[i,1],tempstr1[i,2]);
}
}
sqlscope.Commit();
}
catch
{
sqlscope.Rollback();
}
}注:当sqlscope.ExecuteNonQuery(Sql,lastid,tempstr1[i,0],tempstr1[i,1],tempstr1[i,2]);
执行2次以上(包括2次)时就会发生事务回滚,当它只执行一次时就不会.
二维数组tempstr1[,]的每个元素都是不为null的值(最起码为""),
表T_test2除了字段id,其它字段都为varchar型,且允许为空.
很高兴有人能使用我的东西。
(网站之后放了个最新的代码。有9个例子)在你的代码中。
你已经使用
using(sqlscope.BeginTransaction())
了,这样的话,除非你知道中途可能发生的错误,并且要进行处理,才使用try,catch不使用try,catch的写法最好是:using(sqlscope.BeginTransaction())
{
执行操作代码
sqlscope.Commit();
}这样的话,假如中途发生错误,那么将在“执行操作代码”里抛出异常。使用
try
{
}
catch
{
}
把异常置之不管是不对的。这样外面的程序很难判断里面的操作是否顺利完成。------------你可以把代码中的trycatch去掉。然后发生错误时,你就可以知道错在哪里了。在你明确知道错误地方后,可以进一步优化代码。例如:using(sqlscope.BeginTransaction())
{
执行第一步操作。
try
{
执行第二步操作,它很容易出错,而且错误需要处理
}
catch
{
如果错误范围不是预料中的,那么重新throw,或者return false,等通知调用者,这里失败了
}
//如果这一句最终没有执行,那么事务会回滚。
ss.Commit();
}
打开SQL SERVER的事件探查器,可以跟踪到执行到那条SQL语句时停止了。