VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1048|回复: 5

关于事务处理的问题~希望大家帮忙解决一下

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-2-5 20:00:01 | 显示全部楼层 |阅读模式
是这样的 我现在想对A插入多条数据 同时 由于A表中又一个字段时MAX(ID)+用户组成的一个字符串。实现的过程中发现 插入第一条记录时可以但是第二条就不行了。不知道问题出现在什么地方,由于代码太长 我截取一部分给大家看看
SqlCommand command = DataConn.Connection.CreateCommand();
            SqlTransaction transaction;
            transaction = DataConn.Connection.BeginTransaction();
            command.Connection = DataConn.Connection;
            command.Transaction = transaction;
            try
            {
                for (int i = 0; i < mydv.Count; i++)
                {
                    bm = this.GetFbNo(Convert.ToInt16(oper));
                    mysql="insert...";
                    command.CommandText = mysql;
                    command.ExecuteNonQuery();
                }
                transaction.Commit();
                return 1;
            }
            catch
            {
                transaction.Rollback();
                return 0;
            }
            finally
            {
                transaction.Dispose();
                DataConn.Connection.Close();
            }
public string GetFbNo(int sPersID)
        {
            //DataConn.Connection.Open();
            string sNo = "";
            string sSql = "SELECT MAX(fb_Id)+1 AS MaxNo FROM t_fbalance";
            sNo=DBHelp.ExecuteString(sSql);
            return sNo;
        }
public string ExecuteString(string commandText)
        {
            DataSet ds = new DataSet();
            SqlCommand cmd = new SqlCommand();

            cmd.CommandType = CommandType.Text;
            cmd.CommandText = commandText;
            cmd.Connection = this.myconn;

            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
            da.Fill(ds, "TableName");

            mydv=ds.Tables["TableName"].DefaultView;
            if (mydv.Count > 0)
            {
                return mydv[0][0].ToString().Trim();
            }
            else
            {
                return "";
            }
        }
回复

使用道具 举报

0

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-4-12 16:15:01 | 显示全部楼层
public string GetFbNo(int sPersID)
{
//问题应该在这里,你定义个静态变量,赋值后下次用就在这个基础上加一(或者其它值)直接返回就可以了。

//DataConn.Connection.Open();
string sNo = "";
string sSql = "SELECT MAX(fb_Id)+1 AS MaxNo FROM t_fbalance";
sNo=DBHelp.ExecuteString(sSql);
return sNo;
}
回复

使用道具 举报

0

主题

110

帖子

63.00

积分

新手上路

Rank: 1

积分
63.00
发表于 2020-4-15 13:15:02 | 显示全部楼层
是每次都只能插入一条,第二条就插入不了吗?

最好断点调试一下,看循环每次的bm 值是否都一样?
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-8-3 22:00:02 | 显示全部楼层
:btx221
是个好的方法 我试了几次终于发现了问题的所在 就是当事务处理循环插入的时候当第一个插入或更新以后的就不能在进行读取操作了。不知道什么原因所以我现在还在找资料唉对.NETADO的了解太少了。
回复

使用道具 举报

0

主题

110

帖子

63.00

积分

新手上路

Rank: 1

积分
63.00
发表于 2020-8-4 01:00:01 | 显示全部楼层
这种情况最好设计成自增字段...

插入时就不用再管ID字段了..

Sqlserver 用identity..

oracle用Sequence..
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-8-11 11:45:01 | 显示全部楼层
已经解决 其实很简单 写一个带入事务的查找函数就可以了 谢谢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表