当前位置:首页 > 行业动态 > 正文

c#操作数据库oracle数据库

C#操作Oracle数据库:该文章主要介绍了在C#环境下如何连接和操作Oracle数据库,包括配置连接字符串、执行SQL语句以及处理数据等关键步骤,旨在帮助开发者掌握C#与Oracle数据库交互的基本方法。

在C#中操作Oracle数据库,通常有几种不同的方法可供选择,以下是详细的介绍:

一、使用System.Data.OracleClient

1、引用添加:在项目中添加对System.Data.OracleClient的引用,虽然微软已不推荐使用,但在某些旧项目中仍可能会用到。

2、连接字符串配置:可以在配置文件(如App.config或Web.config)中配置连接字符串,也可以直接在代码中编写。

   <connectionStrings>
     <add name="OracleConnStr" connectionString="Data Source=服务器地址;User ID=用户名;Password=密码" providerName="System.Data.OracleClient"/>
   </connectionStrings>

或者在代码中直接写:

   string connString = "Data Source=服务器地址;User ID=用户名;Password=密码";

3、数据库操作示例

连接数据库

     using (OracleConnection conn = new OracleConnection(connString))
     {
         conn.Open();
         // 后续操作
     }

执行查询命令

     using (OracleConnection conn = new OracleConnection(connString))
     {
         conn.Open();
         OracleCommand cmd = new OracleCommand("SELECT * FROM 表名", conn);
         OracleDataReader reader = cmd.ExecuteReader();
         while (reader.Read())
         {
             // 处理查询结果
         }
     }

执行非查询命令(如插入、更新、删除等)

     using (OracleConnection conn = new OracleConnection(connString))
     {
         conn.Open();
         OracleCommand cmd = new OracleCommand("INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2)", conn);
         int rowsAffected = cmd.ExecuteNonQuery();
     }

二、使用Oracle.DataAccess.Client(ODP.NET)

1、引用添加:通过NuGet包管理器安装Oracle.ManagedDataAccessOracle.DataAccess(较老版本),在项目中添加对相应DLL的引用。

2、连接字符串配置:与System.Data.OracleClient类似,可以在配置文件或代码中配置。

   <connectionStrings>
     <add name="OracleConnStr" connectionString="User Id=myusername;Password=mypassword;Data Source=//localhost:1521/orcl" />
   </connectionStrings>

或者在代码中直接写:

   string connString = "User Id=myusername;Password=mypassword;Data Source=//localhost:1521/orcl";

3、数据库操作示例

连接数据库

     using (OracleConnection conn = new OracleConnection(connString))
     {
         conn.Open();
         // 后续操作
     }

执行查询命令

     using (OracleConnection conn = new OracleConnection(connString))
     {
         conn.Open();
         OracleCommand cmd = new OracleCommand("SELECT * FROM mytable", conn);
         OracleDataReader reader = cmd.ExecuteReader();
         while (reader.Read())
         {
             // 处理查询结果
         }
     }

执行非查询命令(如插入、更新、删除等)

     using (OracleConnection conn = new OracleConnection(connString))
     {
         conn.Open();
         OracleCommand cmd = new OracleCommand("INSERT INTO mytable (column1, column2) VALUES (:value1, :value2)", conn);
         cmd.Parameters.Add("value1", value1);
         cmd.Parameters.Add("value2", value2);
         int rowsAffected = cmd.ExecuteNonQuery();
     }

三、使用Oracle.ManagedDataAccess.dll(推荐)

1、引用添加:通过NuGet包管理器搜索并安装Oracle.ManagedDataAccess,然后在项目中添加引用。

2、连接字符串配置:不需要配置TnsNames.Ora文件,连接字符串格式如下:

   string connString = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=服务器地址)(PORT=端口号)))(CONNECT_DATA=(SERVICE_NAME=服务名)));User Id=用户名;Password=密码";

3、数据库操作示例:与Oracle.DataAccess.Client的操作方式基本相同,只是在创建OracleConnection对象时使用new OracleConnection(connString)即可。

四、相关注意事项

1、异常处理:在进行数据库操作时,务必添加适当的异常处理代码,以捕获和处理可能出现的异常,如连接失败、SQL语法错误等。

   try
   {
       // 数据库操作代码
   }
   catch (Exception ex)
   {
       // 记录异常信息或进行其他处理
       Console.WriteLine(ex.Message);
   }

2、资源释放:确保在使用完数据库连接、命令对象和数据读取器后,及时关闭它们以释放资源,可以使用using语句自动管理资源的释放,如上述示例中的用法。

3、安全性考虑:避免在代码中硬编码用户名和密码等敏感信息,建议使用加密的方式存储和读取这些信息,或者通过安全的配置文件或环境变量来获取。

4、性能优化:对于频繁执行的数据库操作,可以考虑使用连接池来提高性能。Oracle.ManagedDataAccess.dll默认启用了连接池,可以通过配置连接字符串中的Pooling属性来进一步优化连接池的行为。Pooling=true;Min Pool Size=10;Max Pool Size=100;Connection Lifetime=60;Incr Pool Size=5

5、事务处理:如果需要进行多个相关的数据库操作,并且希望这些操作要么全部成功要么全部失败,可以使用事务来保证数据的一致性。

   using (OracleConnection conn = new OracleConnection(connString))
   {
       conn.Open();
       using (OracleTransaction trans = conn.BeginTransaction())
       {
           try
           {
               // 执行多个数据库操作
               // ...
               trans.Commit();
           }
           catch (Exception ex)
           {
               trans.Rollback();
               // 处理异常
           }
       }
   }

6、参数化查询:为了防止SQL注入攻击,建议使用参数化查询而不是直接拼接SQL字符串,在Oracle.ManagedDataAccess.dllOracle.DataAccess.Client中,都可以通过为OracleCommand对象添加Parameters来实现参数化查询,如上述示例中所示。

7、数据类型映射:注意C#中的数据类型与Oracle数据库中的数据类型之间的映射关系,以确保数据的正确读写,Oracle中的NUMBER类型可以映射到C#中的intdecimaldouble等类型,VARCHAR2类型可以映射到C#中的string类型等,但在处理一些特殊数据类型(如CLOB、BLOB等)时,可能需要额外的处理代码来正确地读取和写入数据。

8、版本兼容性:确保所使用的Oracle.ManagedDataAccess.dllOracle.DataAccess.Client的版本与Oracle数据库服务器的版本兼容,以避免出现兼容性问题,较新的客户端库版本能够更好地支持较新的数据库功能和特性,也要注意不同版本的库可能在API上有一些差异,需要根据具体的文档进行调整。