标签: sqltransaction

在BEGIN/END TRANSACTION中执行存储过程

如果我在SQL中创建存储过程并EXEC spStoredProcedure在BEGIN/END TRANSACTION中调用它(),那么其他存储过程是否也属于事务?

我不知道它是否像C#中的try/catches一样工作.

sql sql-server stored-procedures rollback sqltransaction

39
推荐指数
4
解决办法
8万
查看次数

如何在c#中使用sqltransaction

我正在使用以下代码一次执行两个命令.我使用sqltransaction来确保所有命令都被执行或回滚.当我运行没有"事务"的程序时它运行正常但是当我使用"事务"时它们显示错误.我的代码如下;

SqlTransaction transaction = connectionsql.BeginTransaction();

try
{
    SqlCommand cmd1 = new SqlCommand("select account_name from master_account where NOT account_name = 'BANK' AND NOT account_name = 'LOAN'", connectionsql);
    SqlDataReader dr1 = cmd1.ExecuteReader();
    while (dr1.Read())
    {
        comboBox1.Items.Add(dr1[0].ToString().Trim());
    }
    cmd1.Dispose();
    dr1.Dispose();

    SqlCommand cmd2 = new SqlCommand("select items from rate",connectionsql);
    SqlDataReader dr2 = cmd2.ExecuteReader();
    while (dr2.Read())
    {
        comboBox2.Items.Add(dr2[0].ToString().Trim());
    }
    cmd2.Dispose();
    dr2.Dispose();
    transaction.Commit();

    dateTimePicker4.Value = dateTimePicker3.Value;
}
catch(Exception ex)
{
    transaction.Rollback();
    MessageBox.Show(ex.ToString());
}
Run Code Online (Sandbox Code Playgroud)

和错误:

在此输入图像描述

c# sql-server sqltransaction

20
推荐指数
4
解决办法
10万
查看次数

SQL SERVER - 了解MIN(文本)的工作原理

我正在进行一些挖掘并寻找有关SQL Server如何评估的解释MIN(Varchar).

我在BOL中找到了这句话:MIN在底层数据库中定义的整理顺序中找到最低值

因此,如果我有一个包含以下值的行的表:

Data

AA
AB
AC
Run Code Online (Sandbox Code Playgroud)

做一个SELECT MIN(DATA)会返回AA.我只是想了解这背后的原因并更好地理解BOL.

谢谢!

t-sql sql-server sqltransaction

19
推荐指数
2
解决办法
3万
查看次数

无法执行事务操作,因为有待处理的请求正在运行

背景

我有一些代码打开一个SQL连接,开始一个事务并在数据库上执行一些操作.此代码从DB(dequeue)创建一个对象,获取一些值并将其保存回来.整个操作需要在交易中进行.所有代码在没有事务的情况下完美运行.

using (var connection = new SqlConnection(connectionString))
{
    connection.Open();
    var transaction = connection.BeginTransaction();
    try
    {                       
        var myObject = foo.Dequeue(connection, transaction);

        var url = myObj.GetFilePathUri(connection, transaction);

        //some other code that sets object values

        myObj.SaveMessage(connection, transaction);
        transaction.Commit(); //error here
    }
    catch(Exception ex)
    {                    
        transaction.Rollback();
        //logging                
    }
    finally
    {
        //cleanup code
    }
}
Run Code Online (Sandbox Code Playgroud)

出列方法代码

public foo Dequeue(SqlConnection connection, SqlTransaction transaction)
{
    using (var command = new SqlCommand(DEQUEUE_SPROC, connection) {CommandType = CommandType.StoredProcedure, Transaction = transaction})
    {
        var reader = command.ExecuteReader();
        if (reader.HasRows)
        { …
Run Code Online (Sandbox Code Playgroud)

c# ado.net transactions sqltransaction

15
推荐指数
2
解决办法
2万
查看次数

配置的执行策略"SqlAzureExecutionStrategy"不支持用户启动的事务

我正在使用最新的v6实体框架以及UnitOfWork模式.在过去的几年里,这在服务器上一直很好.

我想转移到azure托管并使用SQLAzure,因此开始迁移应用程序.但是我遇到了很多问题.

首先,我一直在间歇地得到这个错误

从服务器接收结果时发生传输级错误.

经过一些谷歌搜索,似乎这很常见,你需要实现自己的SqlAzureExecutionStrategy- 一切似乎都很好.直到我发现它不支持发起的交易!

然后我偶然发现了这篇博文 - 其中概述了确切的问题并提供了如何解决问题的示例代码(或者我认为).

我完全按照这个帖子(据我所知).我有我的dBconfiguration类设置,它在应用程序启动时击中了SetExecutionStrategy.

public class EfConfig : DbConfiguration
{
    public EfConfig()
    {
        SetExecutionStrategy("System.Data.SqlClient", () => SuspendExecutionStrategy
              ? (IDbExecutionStrategy)new DefaultExecutionStrategy()
              : new CustomSqlAzureExecutionStrategy());
    }

    public static bool SuspendExecutionStrategy
    {
        get { return (bool?)CallContext.LogicalGetData("SuspendExecutionStrategy") ?? false; }
        set { CallContext.LogicalSetData("SuspendExecutionStrategy", value); }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个上面引用的自定义类,名为'CustomSqlAzureExecutionStrategy',我在下面提到并覆盖了ShouldRetryOn方法

public class CustomSqlAzureExecutionStrategy : SqlAzureExecutionStrategy
{
    protected override bool ShouldRetryOn(Exception exception)
    {
        var shouldRetry = false;

        var sqlException = exception as SqlException;
        if (sqlException != null)
        {
            foreach …
Run Code Online (Sandbox Code Playgroud)

entity-framework azure sqltransaction azure-sql-database

14
推荐指数
1
解决办法
8393
查看次数

如果数据已更改,请不要更新ResultSet中的行

我们从各种数据库类型(Oracle,MySQL,SQL-Server,...)中提取数据.一旦成功写入文件,我们希望将其标记为已传输,因此我们更新特定列.

我们的问题是,用户有可能在此期间更改数据但可能忘记提交.使用select for update语句阻止记录.所以它可能发生,我们将某些东西标记为已传输,而不是.

这是我们代码的摘录:

Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet extractedData = stmt.executeQuery(sql);
writeDataToFile(extractedData);
extractedData.beforeFirst();
while (extractedData.next()) {
    if (!extractedData.rowUpdated()) {
        extractedData.updateString("COLUMNNAME", "TRANSMITTED");
        // code will stop here if user has changed data but did not commit
        extractedData.updateRow();
        // once committed the changed data is marked as transmitted
    }
}
Run Code Online (Sandbox Code Playgroud)

该方法extractedData.rowUpdated()返回false,因为从技术上讲,用户还没有更改任何内容.有没有办法不更新行并检测数据是否在此后期更改?

不幸的是,我无法更改用户用来更改数据的程序.

java jdbc sqltransaction

14
推荐指数
1
解决办法
1263
查看次数

XACT_ABORT的范围是什么?

SQL Server 2005中SET XACT_ABORT语句的范围是什么?即:开始 - 结束块,过程或触发器,连接,数据库,服务器?

sql-server scope sql-server-2005 sqltransaction xact-abort

13
推荐指数
1
解决办法
1566
查看次数

事务和symfony2实体管理器

有没有办法在symfony2中使用实体管理器(doctrine)手动指定事务,或者可能是在单个事务中完成我自己在下面做两个事务的自然方式?

// creating screen object...
//Creating user object...

        //flush the screen into database in order to get the Id to relate the server (user) to
        $em->persist($screen);
        $em->flush();

        //Get id of just inserted screen and attach that to new server (user)
        $tempRecordId = $screen->getId();
        $tempEntity = $em->getRepository('BizTVContainerManagementBundle:Container')->find($tempRecordId);
        $entity->setScreen($tempEntity);

        //Flush the user also into database
        $em->persist($entity);
        $em->flush();
Run Code Online (Sandbox Code Playgroud)

请参阅我必须刷新我的第一个实体以获取它的ID,所以我可以将我的第二个实体与我的第一个实体相关联......

database doctrine sqltransaction symfony

8
推荐指数
2
解决办法
7086
查看次数

Django REST Framework故意引发错误时的事务错误

我已经使用Django REST Framework从2.x版本更新了一个项目到最后一个稳定版本(3.1.3).在我的序列化程序中修复了一些已弃用的用法之后,我跑去python manage.py test确保没有任何内容被破坏.

一切正常,除了我测试无效REST请求(我故意)的一些测试.例如:

def test_get_events_of_other_user(self):
    # Assume the setUp log the user1 with self.client 
    # and here, there is some code initializing an 
    # event for user2
    response = self.client.get("/event/123/")
    self.assertEqual(404, response.status_code)
Run Code Online (Sandbox Code Playgroud)

视图集生成一个ORM查询MyEventModel.objects.get(user=request.user, pk=123),这显然会在DRF中引发404异常,因为这里不应该返回任何对象(我知道,它应该是一个符合REST的403 ...).但这提出了一个TransactionManagementError:

Traceback (most recent call last):
  [...]
  File "/my_virtual_env_path/local/lib/python2.7/site-packages/rest_framework/viewsets.py", line 85, in view
    return self.dispatch(request, *args, **kwargs)
  File "/my_virtual_env_path/local/lib/python2.7/site-packages/rest_framework/views.py", line 456, in dispatch
    response = self.handle_exception(exc)
  File "/my_virtual_env_path/local/lib/python2.7/site-packages/rest_framework/views.py", line 421, in handle_exception
    response = exception_handler(exc, …
Run Code Online (Sandbox Code Playgroud)

django sqltransaction django-rest-framework

8
推荐指数
1
解决办法
708
查看次数

SqlTransaction是否需要调用Dispose?

我是否需要在finally块中为SqlTransaction调用dispose?假装开发人员没有在任何地方使用USING,只需尝试/捕获.

SqlTransaction sqlTrans = con.BeginTransaction();

try
{
     //Do Work
sqlTrans.Commit()
}
catch (Exception ex)
        {

           sqlTrans.Rollback();
        }

 finally
        {
            sqlTrans.Dispose();
            con.Dispose();
        }
Run Code Online (Sandbox Code Playgroud)

.net dispose transactions sqltransaction

7
推荐指数
2
解决办法
1万
查看次数