2014-11-21 2 views
0

Я хочу получить данные из базы данных с помощью C++. Мне нужно сделать это независимо от db, используемого в системе. Но я не хочу менять свой код для каждой базы данных. Я ищу решение в C++. Net, пожалуйста, помогите .. Это то, что у меня есть сейчас;Как мы можем использовать соединение базы данных sql и oracle с использованием только одного объекта

Oracle:

OracleConnection *myOracleConnection; OracleDataAdapter * myDataAdapter; DataSet * myDataSet; myOracleConnection = new OracleConnection(S"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.175)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=SCDB)));User Id=user;Password=pw;"); myOracleConnection->Open(); myDataAdapter = new OracleDataAdapter(S"select dbms_xmlgen.getxml(' select * from SampleTable') from dual ",myOracleConnection); myDataSet = new DataSet("Sample");

Sql:

`SqlConnection  *mySQLConnection; 
SqlDataAdapter * myDataAdapter; 
DataSet * myDataSet; 
mySQLConnection = new SqlConnection(S"Data Source=(local);Initial Catalog=myDb;User Id=user;Password=pw;"); 
    mySQLConnection->Open(); 
    myDataAdapter = new SqlDataAdapter(S"select * from [SampleTable]",mySQLConnection); 
    myDataSet = new DataSet("Sample");` 

я хочу сделать и соединение с помощью одного объекта подключения. Есть ли идея достичь этого ???

ответ

0

Я не могу дать вам код C++, но я могу помочь вам, как это сделать. Это будет сложно сделать в одном соединении, но вы можете вернуть DataSet, который будет работать, и вам нужно будет только один раз сделать код.

Создание метода возвращает DataSet и передает запрос, а также тип соединения, в этом методе, в зависимости от типа соединения с туром, который вы делаете и возвращаете результат.

Вы также можете добавить соединительную строку, если хотите.

Что-то вроде этого (это C#, хотя)

DataSet GetDataSet(string sqlQuery, ConnectionType connType) 
    { 
     DataSet dataset = new DataSet("aDataSet"); 
     using (DataTable table = dataset.Tables.Add("aDataTable")) 
     { 
      switch (connType) 
      { 
       case ConnectionType.MSSQL: 
        using (var conn = new SqlConnection("Data Source=(local);Initial Catalog=myDb;User Id=user;Password=pw")) 
        { 
         using (var cmd = new SqlCommand(sqlQuery, conn)) 
         { 
          conn.Open(); 
          using (var reader = cmd.ExecuteReader()) 
          { 
           table.Load(reader); 
          } 
         } 
        } 
        break; 
       case ConnectionType.Oracle: 
        using (var conn = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.175)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=SCDB)));User Id=user;Password=pw")) 
        { 
         using (var cmd = new OracleCommand(sqlQuery, conn)) 
         { 
          conn.Open(); 
          using (var reader = cmd.ExecuteReader()) 
          { 
           table.Load(reader); 
          } 
         } 
        } 
        break; 
       default: 
        break; 
      } 
     } 
     return dataset; 
    } 

    enum ConnectionType { MSSQL, Oracle } 
+0

Спасибо и очень много. Я уже пробовал это, я искал любой другой более простой метод. :) – shaheer

+0

Можете ли вы привести мне пример того, что вы хотите в своем вопросе. Может быть, есть другой способ, используя DbConnection и DbCommand, так как оба SqlConnetion и OracleConnection наследуются от него. – Jaques

+0

Я ищу использование DbConnection и DbCommand. Я попытался с DbConnection, как это, DbConnection * conn; conn = new SqlConnection (S "Источник данных = (локальный); Начальный каталог = myDb; Идентификатор пользователя = пользователь; Пароль = pw;"); conn-> Open(); myDataAdapter = новый SqlDataAdapter (S "select * from [LabOpsStatus]", conn); но я получил сообщение об ошибке «System :: Data :: SqlClient :: SqlDataAdapter :: SqlDataAdapter (System :: String __gc *, System :: String __gc *)»: невозможно преобразовать параметр 2 из «System :: Data :: Common: : DbConnection __gc * 'to' System :: String __gc * '"- – shaheer

Смежные вопросы