簡體   English   中英

SqlCommand.ExecuteScalar運行后,事務變為空

[英]Transaction becomes null after SqlCommand.ExecuteScalar is run

我在SQL Server中有一個表,定義如下

create table Customer (ID varchar(10), Name varchar(200))

Insert into Customer 
values ('00001', 'Cust1'), ('ID00002', 'Cust2')

當我使用ID查詢客戶名稱時(數據類型錯誤,它是varchar ,但是其值作為int傳遞),該命令返回正確的名稱,但是它的交易記錄為空,並且在嘗試提交時收到錯誤消息

InvalidOperationException
此SqlTransaction已完成; 它不再可用。

我的代碼:

using (var conn = new SqlConnection(connString))
{
    conn.Open();

    using (var trans = conn.BeginTransaction())
    {
        using (var cmd = new SqlCommand("SELECT Name FROM Customer WHERE ID = 1")) // After this command is executed, its transaction becomes null.
        //using (var cmd = new SqlCommand("SELECT Name FROM Customer  WHERE ID = '000001'")) // This runs fine.
        {
            cmd.Connection = conn;
            cmd.Transaction = trans;
            var res = cmd.ExecuteScalar();
        }

        trans.Commit(); 
    }
}

我有什么辦法可以檢查這種情況,並在命令執行時使它失敗,而不是在以后的階段獲取異常?

當輸入表達式的計算結果為有效的數值數據類型時,ISNUMERIC返回1;否則,返回0。 否則返回0。

您嘗試此代碼

  using (var conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["SchoolPlusDBContext"].ConnectionString))
        {
            conn.Open();

            using (var trans = conn.BeginTransaction())
            {
                using (var cmd = new SqlCommand("SELECT Name FROM Customer where  ISNUMERIC(id)=1 and Id=1")) // After this command is executed, its transaction becomes null.
                //using (var cmd = new SqlCommand("SELECT Name FROM Customer  WHERE ID = '000001'")) // This runs fine.
                {
                    cmd.Connection = conn;
                    cmd.Transaction = trans;
                    var res = cmd.ExecuteScalar();
                }

                trans.Commit();
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM