我正在尝试在主表和详细表中插入数据。
我的主表问: Insert INTO tblMain();
然后我在做:
declare @OrderID as int;
set @OrderID=scope_identity();
Update Orders SET OrderID=(LTRIM(RTRIM(OrderID))+ RIGHT('0000000'+CAST(@OrderID AS VARCHAR(7)),7)) WHERE OrderId=@OrderID;
SELECT @OrderID
然后我使用@OrderID
as
的值插入详细信息表Insert into tbl_Details(OrderID,SKU,amount) Values(@OrderID,NULL,20 );
如果 in tbl_Details
,不为空,如果我一次运行所有查询并作为空值传递SKU
,我不会收到异常。ExecuteScalar
SKU
我的执行功能是:
public static double ExecuteScalarQuery(string SQL, ref string ErrMsg)
{
ErrMsg = "";
using (SqlConnection conn = new SqlConnection(GetDBConn()))
{
SqlTransaction otrans = null;
double dblRetVa = 0;
try
{
conn.Open();
otrans = conn.BeginTransaction();
SqlCommand cmd = new SqlCommand(SQL, conn);
cmd.Transaction = otrans;
dblRetVa = double.Parse(cmd.ExecuteScalar().ToString());
otrans.Commit();
conn.Close();
}
catch (Exception ex)
{
ErrMsg = ex.ToString().Trim();
if (otrans != null) otrans.Rollback();
}
return dblRetVa;
}
}
我有解决方案,但为此我将不得不更改我的函数的签名,如下所示:
public static double ExecuteNonQueryWithSelect(string SQL, string sQry2,string SelectColID , ref string ErrMsg)
{
ErrMsg = "";
using (SqlConnection conn = new SqlConnection(GetDBConn()))
{
SqlTransaction otrans = null;
double dblRetVal = 0;
try
{
conn.Open();
otrans = conn.BeginTransaction();
SqlCommand cmd = new SqlCommand(SQL, conn);
cmd.Transaction = otrans;
dblRetVal = double.Parse(cmd.ExecuteScalar().ToString());
SqlCommand cmd2 = new SqlCommand(sQry2.Replace(SelectColID.Trim(), dblRetVal.ToString()), conn);
cmd2.Transaction = otrans;
cmd2.ExecuteNonQuery();
otrans.Commit();
conn.Close();
}
catch (Exception ex)
{
ErrMsg = ex.ToString().Trim();
if (otrans != null) { otrans.Rollback(); dblRetVal = 0; }
}
return dblRetVal;
}
}
我想要的是我是否可以在我的旧函数中做 ant 事情,以便如果明细表中的某些不可为空的字段作为 null 传递而不更改我的函数签名,它会抛出异常。