[英]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.