Я пытаюсь написать аккуратный маленький универсальный метод Sql, который будет принимать SQL-запрос и список параметров и возвращать результат.Я хочу, чтобы он был достаточно аккуратным, чтобы я мог вызывать его одной строкой из любого другого кода.
Есть ли какой-нибудь действительно изящный способ сделать это?Я не хочу создавать все SqlParameters в вызывающем коде, и я не хочу передавать и разбивать строку.В прошлом я использовал массив string [] и принимал каждый нечетный член в качестве имени параметра, а каждый четный - в качестве значения параметра, но это слишком легко испортить при вызове метода.
В идеале я бы хотел сделать именно это:
Data.SQL("Select * from Table where my_id = @my_id", { my_id = 1 });
Я знаю, что это немного нереально, поэтому я попробовал это:
Data.SQL("Select * from Table where my_id = @my_id", new Object[,]{ { "my_id", 1 } });
Однако, когда я пытаюсьи обрабатывать это на другом конце, я получаю только неприятности:
public static Object SQL(String command, Object[,] parameters = null){
[ ... reusable SQL code here... ]
foreach(Object[] p in parameters){
cmd.Parameters.Add(new SqlParameter(p[0].ToString(), p[1].ToString());
}
}
выглядит хорошо, но выдает ошибку в операторе foreach
foreach (Object[] p in parameters)
Невозможнодля приведения объекта типа 'System.String' к типу 'System.Object []'
Но я не передал это массив System.String,То, что я передал , было 2D System.Object []!Не так ли?
Может быть, это просто небольшая проблема с кодом, что-то глупое, я делаю неправильно.Обычно это так.Но я полагаю, что вы, ребята, знаете какой-то еще более изящный способ сделать все это.