Вызов хранимой процедуры, которая имеет динамические значения на основе переданных параметров
Я пытаюсь вызвать хранимую процедуру из С#, которая в основном позволяет мне передать ему два параметра: номер счета и сумму претензии.
На основе значений, переданных в хранимую процедуру, он проверяет номер счета и сумму заявки и возвращает результат, который изменяется (динамически) в зависимости от того, что вы передаете.
Моя проблема заключается в том, что он не работает в определенных тестовых сценариях и преуспевает в других. Мой результат может возвратиться
St_Key, Supplier_Claim, Orig_Inv, System_Cost, Error
колонны. Однако разные счета-фактуры и претензии имеют разные результаты, поэтому для счета-фактуры, где номер не выходит из него, возвращает только сообщение STKey и сообщение об ошибке, некоторые сценарии проверки могут возвращать все, из которых три столбца основаны на результате.
Моя проблема в том, что служба WCF, которую я тестирую, не выполняет вызов, если некоторые из значений являются нулевыми. Надеюсь, это имеет смысл, пожалуйста, найдите здесь код:
public Supplier_Claim_Upload_Result ExcludeFailedValidationRecords(string lineNumber, decimal totalClaim)
{
Supplier_Claim_Upload_Result supplierClaimUplaod = new Supplier_Claim_Upload_Result();
var sqlConnection = "data source=WMVSQL02;initial catalog=Embrace;integrated security=True;";
using (SqlConnection conn = new SqlConnection(sqlConnection))
{
SqlCommand cmd = new SqlCommand();
cmd.CommandTimeout = 60;
SqlDataReader reader;
cmd.CommandText = "CRM.Supplier_Claim_Upload";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Invoice", SqlDbType.NVarChar).Value = lineNumber;
cmd.Parameters.Add("@Amount", SqlDbType.Decimal).Value = totalClaim;
cmd.Connection = conn;
conn.Open();
reader = cmd.ExecuteReader();
while (reader.Read())
{
supplierClaimUplaod.ST_Key = reader["ST_Key"].ToString();
supplierClaimUplaod.Supplier_Claim = reader["Supplier_Claim"].ToString() != null ? reader["Supplier_Claim"].ToString() : string.Empty;
supplierClaimUplaod.Orig_Inv = reader["Orig_Inv"].ToString();
supplierClaimUplaod.System_Cost = reader["System_Cost"].ToString();
//supplierClaimUplaod.Error = reader["Error"] == null ? reader["Error"].ToString() : null; // this line fails on 1st example
}
conn.Close();
return supplierClaimUplaod;
}
}
Вот два примера возврата результата
DECLARE @return_value int
EXEC @return_value = [CRM].[Supplier_Claim_Upload]
@Invoice = NCNTA5000229001-1,
@Amount = 663.800
SELECT 'Return Value' = @return_value
GO
Здесь я NCNTA5000229001-1
номер NCNTA5000229001-1
и сумму претензии 663.800
, это ответ, который я получаю
И вот второй пример, когда из хранимой процедуры возвращаются только STKey и Error, я передаю не существующий счет-фактуру и неправильную сумму
Моя проблема, с которой я столкнулась, заключается в том, что когда я вызываю хранимую процедуру для примера 1, она терпит неудачу, так как у моего типа результата нет столбца error
где моя служба завершается с ошибкой. Любая идея, как я могу вернуть только результат, необходимый для каждого сценария, в общем виде, поскольку результат изменяется на разные вызовы, и он не работает с моим кодом?
Вы не должны возвращать другую схему с помощью той же хранимой процедуры, чтобы указать известную ошибку, которую вы должны исключить из хранимой процедуры с известным идентификатором кода ошибки, а затем обрабатывать ее со стороны приложения.
Вы можете найти полезные
- Вопросы
- Stored-procedures
- Вызов хранимой процедуры, которая имеет динамические значения на основе переданных параметров