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();
}
}
我能做些什么来检查这样的场景,并在命令执行时失败,而不是在稍后阶段获得异常?
发布于 2017-11-09 22:50:04
当输入表达式计算为有效的数字数据类型时,ISNUMERIC返回1;否则返回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();
}
}
https://stackoverflow.com/questions/47216417
复制相似问题