2014-11-21 63 views
0

我想使用C++。Net从数据库中获取数据。我需要这样做,而不考虑系统中使用的数据库。但我不想为每个数据库更改我的代码。我正在寻找C++ .Net中的解决方案,请帮忙.. 这就是我现在所拥有的;我们如何才能使用sql和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 2014-11-21 12:09:53

+0

你能给我一个你想要的问题的例子吗?使用DbConnection和DbCommand可能有另一种方法,因为SqlConnetion和OracleConnection都从它继承。 – Jaques 2014-11-21 12:45:19

+0

我正在寻找DbConnection和DbCommand的用法。我尝试用这种DbConnection,DbConnection * conn; conn = new SqlConnection(S“Data Source =(local); Initial Catalog = myDb; User Id = user; Password = pw;”); conn->打开(); myDataAdapter = new SqlDataAdapter(S“select * from [LabOpsStatus]”,conn);但我得到一个错误“System :: Data :: SqlClient :: SqlDataAdapter :: SqlDataAdapter(System :: String __gc *,System :: String __gc *)':无法将参数2从'System :: Data :: Common: :DbConnection __gc *'到'System :: String __gc *'“ - – shaheer 2014-11-24 05:18:02

相关问题