Как использовать параметр ADO.Net с поддержкой нескольких клиентов - PullRequest
0 голосов
/ 17 февраля 2011

Я создаю оболочку ado.net, которая может соединяться с любой базой данных (поддерживаемой ADO.Net) в основном из SQl, Oledb, Odbc, Oracle, Sqlite и т. Д. Я реализовал соединение и все другие основные вещи.Но в тот момент, когда моим запросам нужен параметр для перехода с других уровней, я застрял там.Я знаю, что для этой цели мы используем IDataParameterCollection или IDbDataParameters и т. Д. Но не знаем, как реализовать.

Так что вас, ребята, просят помочь мне.Это было бы очень полезно.

ИЛИ

Короче говоря, мне нужен независимый способ передачи параметров, которые будут использоваться во всех типах клиентов, будь то SqlClient, OracleClientили любой другой клиент.

Спасибо !!!

Ответы [ 2 ]

1 голос
/ 17 февраля 2011

Хорошо.На стороне пользователя:

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);
      }
1 голос
/ 17 февраля 2011

(cmd - это экземпляр DbCommand)

DbParameter p = cmd.CreateParameter();
p.Direction = ParameterDirection.Input;
p.Value = the_value;
p.ParameterName = the_param_name;
p.DbType = ...

cmd.Parameters.Add(p);

Тогда запросы похожи на select * from table where field = ?.Но будьте осторожны с порядком или созданием параметров.

Джокер ? должен быть независимым.

...