C# 如果作为参数传递,则关闭OLEDB连接

C# 如果作为参数传递,则关闭OLEDB连接,c#,database,parameters,oledb,parameter-passing,C#,Database,Parameters,Oledb,Parameter Passing,我试图使用OleDbCommand参数化SQL创建,以避免SQL注入。所以,我想要一个通用的方法来完成这项工作,并返回一个我可以进一步使用的对象 我想使用第页上的代码: 及 我应该返回OleDbCommand命令吗?我可以作为命令.ExecuteReader()和命令执行..ExecuteNonQuery()您展示的示例非常糟糕。我认为微软应该被告知他们网站上的这段非常糟糕的代码 我将尝试做一个更好的例子,并解释原因 public OleDbCommand CreateMyOleDbComman

我试图使用OleDbCommand参数化SQL创建,以避免SQL注入。所以,我想要一个通用的方法来完成这项工作,并返回一个我可以进一步使用的对象

我想使用第页上的代码:


我应该返回OleDbCommand命令吗?我可以作为
命令.ExecuteReader()
命令执行..ExecuteNonQuery()

您展示的示例非常糟糕。我认为微软应该被告知他们网站上的这段非常糟糕的代码

我将尝试做一个更好的例子,并解释原因

public OleDbCommand CreateMyOleDbCommand(OleDbConnection connection,
    string queryString, OleDbParameter[] parameters) 
{
    OleDbCommand command = new OleDbCommand(queryString, connection);
    command.Parameters.AddRange(parameters);
    return command;
}
首先,该方法应该返回一个OleDbCommand,并正确初始化其参数和commandtext。因此,我将该方法的返回值从void更改为OleDbCommand。通过这种方式,您可以使用调用代码中的命令来执行查询

其次,OleDbCommand有一个构造函数,用于接收命令文本和连接。使用此构造函数构建OleDbCommand将避免随后传递命令文本,并避免设置与参数的连接

第三,要向OleDbCommand的参数集合添加参数数组,需要使用参数集合的AddRange方法


现在,在您的调用代码中,您已经定义了OleDbConnection,您可以调用此方法,打开连接并执行命令(ExecuteReader、ExecuteOnQuery或ExecuteScalar,具体取决于命令文本)。当然,在打开连接的地方,首先也要关闭连接,据我所知,
queryString
传递给
OleDbCommand
的是命令文本,那么为什么要在之后手动设置此属性,而不是在构造函数中传递它呢?最好在调用
CreateMyOleDbCommand
的方法中关闭连接(如果需要)。由于方法命名,返回的代码与Microsoft站点上的代码完全相同,这似乎是正确的。真的是一个糟糕的例子似乎设置
CommandText
的部分是不必要的,应该删除)因为您使用的是
读取器
我会使用
ExecuteReader()
方法。
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()
public OleDbCommand CreateMyOleDbCommand(OleDbConnection connection,
    string queryString, OleDbParameter[] parameters) 
{
    OleDbCommand command = new OleDbCommand(queryString, connection);
    command.Parameters.AddRange(parameters);
    return command;
}