C# 如何使用多客户端支持的ADO.Net参数

C# 如何使用多客户端支持的ADO.Net参数,c#,database,visual-studio-2008,ado.net,C#,Database,Visual Studio 2008,Ado.net,我正在构建一个ado.net包装器,它可以连接任何数据库(由ado.net支持),基本上来自SQl、Oledb、Odbc、Oracle、Sqlite等。我实现了连接和所有其他基本功能。但是,当我的查询需要从其他级别传递参数时,我被绊住了。我知道为此我们使用IDataParameterCollection或IDbDataParameters等,但不知道如何实现 所以请你们帮帮我。这将是一个很大的帮助 或 简而言之,我需要一种独立的方法来传递参数,这种方法将用于所有类型的客户机,无论是SqlClie

我正在构建一个ado.net包装器,它可以连接任何数据库(由ado.net支持),基本上来自SQl、Oledb、Odbc、Oracle、Sqlite等。我实现了连接和所有其他基本功能。但是,当我的查询需要从其他级别传递参数时,我被绊住了。我知道为此我们使用IDataParameterCollection或IDbDataParameters等,但不知道如何实现

所以请你们帮帮我。这将是一个很大的帮助

简而言之,我需要一种独立的方法来传递参数,这种方法将用于所有类型的客户机,无论是SqlClient、OracleClient还是任何其他客户机

谢谢

(cmd是DbCommand实例)

然后,查询类似于
select*from table where field=?
。但是,要注意顺序或创建参数


小丑应该是独立的。

好的。在用户端:

SqlParameter s1 = new SqlParameter();
s1.Direction = ParameterDirection.Input;
s1.ParameterName = "s1";

SqlParameter s2 = new SqlParameter();
s2.Direction = ParameterDirection.Input;
s2.ParameterName = "s2";

this.ExecuteScalar("query", new IDataParameter[] { s1, s2 });
public int ExecuteScalar(string commandText, IDataParameter[] param)
      {
         IDbCommand cmd = connection.CreateCommand();
         cmd.CommandText = commandText;
         foreach (IDataParameter p in param)
            cmd.Parameters.Add(p);
      }
另一方面:

SqlParameter s1 = new SqlParameter();
s1.Direction = ParameterDirection.Input;
s1.ParameterName = "s1";

SqlParameter s2 = new SqlParameter();
s2.Direction = ParameterDirection.Input;
s2.ParameterName = "s2";

this.ExecuteScalar("query", new IDataParameter[] { s1, s2 });
public int ExecuteScalar(string commandText, IDataParameter[] param)
      {
         IDbCommand cmd = connection.CreateCommand();
         cmd.CommandText = commandText;
         foreach (IDataParameter p in param)
            cmd.Parameters.Add(p);
      }

没有人知道我的答案,或者我的问题含糊不清。我没见过这么慢的会员。。。请任何意见或任何反馈,我急切地等待解决方案。。。请提供一些解决方案……好的,用IDbDataParameter替换DbParameter。它也应该起作用;)很少有疑问1。我正在使用IDbCommand而不是DbCommand。2.我的方法签名是public int ExecuteScalar(字符串commandText,IDataParameter[]参数)。3.我希望用户只从数据层传递参数。类似于这样的var arr=new[]{new sqlparam(),new sqlparam(),new sqlparam(),new sqlparam(),}以任何方式将此var arr作为idataparameter传递