C#是一种广泛使用的编程语言,尤其在开发企业级应用程序时,常常需要与数据库进行交互,如SQL Server和Oracle。这两个数据库系统是业界常用的数据库管理系统,它们各有特点,但都有各自的.NET框架支持,使得C#开发者可以方便地进行数据操作。
一、C#操作SQL Server数据库
1. **包含命名空间**:在C#代码中,首先需要包含`System.Data.SqlClient`命名空间,这包含了处理SQL Server所需的所有类和方法。
2. **创建连接字符串**:连接字符串定义了数据库服务器的位置、要连接的数据库名、用户名和密码。例如:
```csharp
string strConn = "Data Source = 1; Initial Catalog = 2; User ID = 3; Pwd = 4";
```
其中,`1`代表服务器IP或服务器名称,`2`是数据库名,`3`是用户名,`4`是密码。
3. **建立数据库连接**:使用`SqlConnection`类创建一个新的数据库连接实例。
```csharp
SqlConnection conn = new SqlConnection(strConn);
```
4. **打开连接**:调用`Open()`方法来建立与数据库的连接。
```csharp
conn.Open();
```
5. **编写SQL语句**:根据需求编写SQL查询或DML语句,如选择所有表中的记录。
```csharp
string strSql = "SELECT * FROM TABLE";
```
6. **创建命令对象**:使用`SqlCommand`类创建一个SQL命令,将SQL语句和连接对象作为参数传递。
```csharp
SqlCommand cmd = new SqlCommand(strSql, conn);
```
7. **执行SQL命令**:`SqlCommand`提供三种执行方法:
- `ExecuteScalar()`:返回第一条记录的第一列,通常用于单值查询,结果需强制类型转换。
- `ExecuteReader()`:返回`SqlDataReader`对象,可用于遍历所有记录,适用于查询多条记录。
- `ExecuteNonQuery()`:返回受影响的行数,用于INSERT、UPDATE、DELETE等操作。
对于`ExecuteReader()`的示例:
```csharp
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read()) {
// 获取日期字段并转换为字符串
temp.Bt.Date = dr["Date"].ToString();
}
```
8. **关闭连接**:确保在操作完成后关闭数据库连接以释放资源。
```csharp
conn.Close();
```
9. **异常处理**:在数据库操作中,异常处理是必不可少的,应使用`try-catch-finally`块,确保在任何情况下都能正确关闭数据库连接。
二、C#操作Oracle数据库
与SQL Server相似,但需要使用`System.Data.OracleClient`命名空间,并且需要引入Oracle客户端的DLL。创建连接字符串和执行SQL的方式基本相同,只是类名和方法名稍有变化:
1. **包含命名空间**:使用`using System.Data.OracleClient;`引入Oracle支持。
2. **创建连接字符串**:Oracle连接字符串的格式略有不同,不需要`Initial Catalog`,而是直接指定数据库服务名(SID)或服务标识(Service Name)。
```csharp
string strConn = "Data Source = 1; User ID = 2; Pwd = 3";
```
3. **建立数据库连接**:使用`OracleConnection`类创建连接。
```csharp
OracleConnection conn = new OracleConnection(strConn);
```
4. - 8. **执行SQL命令**:与SQL Server的执行过程相同,只是使用`OracleCommand`类,其方法也是`ExecuteScalar()`, `ExecuteReader()`和`ExecuteNonQuery()`。
9. **异常处理**:同样需要处理可能出现的异常,确保数据库连接在任何情况下都能正常关闭。
C#与SQL Server和Oracle数据库的交互主要通过ADO.NET实现,操作流程大致相同,主要是数据库连接字符串、使用的类和方法根据不同的数据库系统有所不同。在实际应用中,需要根据具体的需求和环境进行调整。