Рейтинг:
11
Mehedi Shams
Наряду с предложением Джона (которое является быстрым и хорошим), вы можете использовать ref
переменная. Вызывающий метод будет выглядеть следующим образом (Пожалуйста, не новый string
переменная, и новый параметр передается в вызове функции):
parameters = new string[] { "@TrxNum", "@ShortDesc", "@PaymentOption" };
vals = new string[] { lblTrxNum.Text, txtShortDesc.Text, drpPaymentOptions.SelectedValue };
string ExceptionMsg = "";
DataTable dt = reimburseClass.getDataTableParameter("[NewSP_InsertUpdateReimburseTrxHDR]", parameters, vals, ref ExceptionMsg);
if (!ExceptionMsg.Equals("")) // If there is something in the 'ExceptionMsg'.
{
...........
...........
}
Метод
getDataTableParameter
теперь выглядит примерно так. Смотрите, в конце добавляется новый параметр, и происходит изменение блока CATCH.
public DataTable getDataTableParameter(string qry, string[] param, string[] values, ref string ExceptionMsg)
{
dt = new DataTable();
try
{
con.Open();
cmd = new SqlCommand(qry, con);
cmd.CommandType = CommandType.StoredProcedure;
for (int i = 0; i <= param.Length - 1; i++)
{
cmd.Parameters.AddWithValue(param[i], values[i]);
}
da = new SqlDataAdapter(cmd);
da.Fill(dt);
}
catch (Exception ex)
{
ExceptionMsg = Ex.Message;
}
finally
{
con.Close();
}
return dt;
}
Chris Ross 2
Мои три звезды-вообще идея прекрасная.
Что касается использования "ref" - учитывая, что сообщение об исключении является только исходящим, я бы рекомендовал "out", а не "ref".
Что касается (в вызывающем) тестирования для !ExceptionMsg. Equals (""), я бы сыграл его немного безопаснее, с !string.IsNullOrWhiteSpace (ExceptionMsg) ... который по-прежнему проверяет пустые строки, но также и пустые и строки, которые не имеют значимого содержания (т. е. все они являются пробелами).
Mehedi Shams
Привет, Крис, спасибо за ваши предложения по улучшению. Это хорошо. 'реф' и 'вне' нужно немного больше исследований. В общем случае " out "следует практиковать больше, чем "ref", поскольку " ref "несет стоимость по сети (в обе стороны), в то время как" out " имеет накладные расходы только для одного пути.
Просто при использовании, если используется 'out', то он должен быть инициализирован в вызываемом методе (как правило - должна быть инициализирована переменная 'out').
Спасибо снова. Ура :)!
bjay tiamsic
Привет. Спасибо за это, и в настоящее время я пытаюсь использовать ваше предложение. Однако, когда я заменил 'ref' на 'out', строка 'return dt;' вызывает ошибку, говоря: "параметр out 'ExceptionMsg' должен быть назначен до того, как управление покинет текущий метод"
Mehedi Shams
Привет Bjay, если вы видите последнюю строчку моего предыдущего сообщения - 'вне' переменная должна быть инициализирована перед использованием.
В начале вызываемого метода просто поставьте ' ExceptionMsg = "";'. Это будет сделано :).
bjay tiamsic
Он отлично работает! Большое вам спасибо!
Mehedi Shams
Спасибо Бьяю, рад был узнать, что это помогло и сработало нормально. Ура :)!