Я пытаюсь параметризовать создание SQL с помощью OleDbCommand, чтобы избежать SQL-инъекции. Поэтому я хочу использовать общий метод, который может это сделать, и вернуть объект, который я могу использовать далее.Закройте OleDbConnection, если он передан как параметр
Я хочу использовать код на странице: http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx
public void CreateMyOleDbCommand(OleDbConnection connection,
string queryString, OleDbParameter[] parameters)
{
OleDbCommand command = new OleDbCommand(queryString, connection);
command.CommandText =
"SELECT CustomerID, CompanyName FROM Customers WHERE Country = ? AND City = ?";
command.Parameters.Add(parameters);
for (int j=0; j<parameters.Length; j++)
{
command.Parameters.Add(parameters[j]) ;
}
string message = "";
for (int i = 0; i < command.Parameters.Count; i++)
{
message += command.Parameters[i].ToString() + "\n";
}
Console.WriteLine(message);
}
Вопрос 1. Он передает параметр в качестве значения. Итак, мне нужно позвонить connection.Close
в конце? connection.Close
не упоминается в приведенной выше ссылке, так требуется? Я не хочу, чтобы соединения с моей базой данных оставались открытыми во время выполнения кода.
Вопрос 2. Мой исходный код был:
dbReader = new OleDbCommand("select * from Table1 where Table1.Company = '" + company + "'", dbConnection).ExecuteReader();
dbReader.Read();
if (dbReader.HasRows)
{
//Do operations using dbReader["Company"]
}
И
new OleDbCommand("...insert sql query...", dbConnection).ExecuteNonQuery()
Должен ли я вернуть OleDbCommand command
? что я могу выполнить как command.ExecuteReader()
и command..ExecuteNonQuery()
Прежде всего, так как я понимаю 'queryString', который вы передаете' OleDbCommand', является командный текст, так почему вы устанавливаете это свойство после, а не вручную, а не передаете его конструктор? Соединение лучше закрывать (если необходимо) в методе, который вызывает 'CreateMyOleDbCommand'. И из-за имени метода кажется правильным вернуть 'OleDbCommand' –
Ничего себе, этот код точно так же, как на сайте Microsoft. На самом деле плохой пример – Steve
Кажется, что часть с установкой 'CommandText' не нужна и должна быть удалена) –