Я пытаюсь что-то новое (для меня, по крайней мере) и вместо того, чтобы иметь конкретные функции для вызова отдельных хранимых процедур (соотношение функций доступа к данным к 1 к 1), Я пытаюсь написать обобщенные функции, которым передано имя хранимой процедуры, а также строковые массивы имен параметров и значений параметров в качестве аргументов.C# - Обобщенные вызовы хранимых процедур SQL Server
Например:
public DataTable CallQuery(string spName, string[] paramNames, string[] paramValues, string connString)
{
DataTable dt = new DataTable();
SqlConnection conn = new SqlConnection(connString);
try
{
//create a command and assign it to the passed stored procedure name
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn; // new SqlConnection(connString); ;
cmd.CommandText = spName;
//add any and all parameters to the command
for(int i = 0; i < paramNames.Length; i++)
{
SqlParameter temp = new SqlParameter(paramNames[i], paramValues[i]);
cmd.Parameters.Add(temp);
//cmd.Parameters.AddWithValue(paramNames[i], paramValues[i]);
}
//get the data and return it
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
return dt;
}
catch (Exception)
{
return dt;
}
}
К сожалению, по некоторым причинам, когда я вызвать эту функцию со значениями параметров (т.е. paramNames [0] = "@Provider" и paramValues [0] = "& НА Т") и сделать вызов базы данных, я поймаю исключение, заявив, что хранимая процедура ожидала параметр @Provider
.
Я перешагнул и проверил, что параметры добавляются с их значениями, но я все равно получаю то же исключение. Я что-то пропустил здесь?
Причина, по которой я передаю строковые массивы, состоит в том, что в каждой хранимой процедуре может быть от 0 до 5 параметров (до сих пор ...).
Вместо независимых массивов может быть лучше перейти в словарь, хэш-таблицы или общий список, так что легко сохранить имя параметра и его значение вместе. –
Это, вероятно, имеет смысл, не так ли? Я получу это после того, как закончу тестирование остальной логики приложения. Благодаря! – jawood2005