Я пытаюсь вставить данные в основные и подробные таблицы.
Мой основной стол Qry: 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
как Insert into tbl_Details(OrderID,SKU,amount) Values(@OrderID,NULL,20 );
Если в tbl_Details
, SKU
не равно нулю, я не получаю исключения, если я запускаю весь запрос в ExecuteScalar
сразу и передаю SKU
как нуль.
Моя функция Execute:
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;
}
}
то, что я хочу, это то, могу ли я сделать муравей в своей старой функции, чтобы она выдавала исключение, если какое-то поле, не допускающее значение NULL, в таблице сведений передается как null без изменения подписи моей функции.