ODP.NET и параметры - PullRequest
       20

ODP.NET и параметры

0 голосов
/ 02 марта 2010

Я создал стандартное приложение, которое работает с PostgreSQL, и должно работать на Oracle.

Однако я получаю странные ошибки при вставке записей через параметризованный запрос.

Мой отформатированный запрос выглядит следующим образом:

"INSERT INTO layer_mapping VALUES (@ lm_id, @ lm_layer_name, @ lm_layer_file);"

В отличие от Npgsql, который документирует, как использовать параметры, я мог быНе найдено, как Oracle «предпочитает» их использовать.Я мог только найти: 1,: 2,: 3, например.

Я не хочу использовать последовательные параметры, я хочу использовать их именованным способом.

Есть ли способ сделать это?Я делаю что-то не так?

Спасибо

Ответы [ 2 ]

6 голосов
/ 02 марта 2010

Вы можете использовать именованные параметры в ODP.NET следующим образом:

using (var cx=new OracleConnection(connString)){
   using(var cmd=cx.CreateCommand()){
      cmd.CommandText="Select * from foo_table where bar=:bar";
      cmd.BindByName=true;
      cmd.Parameters.Add("bar",barValue);
      ///...
   }
}
0 голосов
/ 29 марта 2016

Я сделал эту библиотеку https://github.com/pedro-muniz/ODPNetConnect/blob/master/ODPNetConnect.cs

так что вы можете делать параметризованную запись и читать так:

ODPNetConnect odp = new ODPNetConnect();
if (!String.IsNullOrWhiteSpace(odp.ERROR))
{
    throw new Exception(odp.ERROR);
}

//Write:
string sql = @"INSERT INTO TABLE (D1, D2, D3)  VALUES (:D1, :D2, :D3)";

Dictionary<string, object> params = new Dictionary<string, object>();
params["D1"] = "D1";
params["D2"] = "D2";
params["D3"] = "D3";

int affectedRows  = odp.ParameterizedWrite(sql, params);

if (!String.IsNullOrWhiteSpace(odp.ERROR))
{
    throw new Exception(odp.ERROR);
}

//read
string sql = @"SELECT * FROM TABLE WHERE D1 = :D1";

Dictionary<string, object> params = new Dictionary<string, object>();
params["D1"] = "D1";

DataTable dt = odp.ParameterizedRead(sql, params);
if (!String.IsNullOrWhiteSpace(odp.ERROR))
{
    throw new Exception(odp.ERROR);
}

Примечания: вы должны изменить эти строки в ODPNetConnect.cs, чтобы установить строку подключения:

static private string devConnectionString = "SET YOUR DEV CONNECTION STRING";
static private string productionConnectionString = "SET YOUR PRODUCTION CONNECTION STRING";

И вам нужно изменить строку 123, чтобы установить окружение для dev или prod.

public OracleConnection GetConnection(string env = "dev", bool cacheOn = false)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...