我正在尝试使用 OleDbCommand 参数化 SQL 创建以避免 SQL 注入。所以,我想要一个通用的方法来完成它并返回一个我可以进一步使用的对象。
我想使用页面上的代码: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()