如何在C#中使用ADO.NET执行SQL语句向Oracle数据库插入新数据并获取刚插入记录的主键ID?
时间: 2024-11-24 09:40:42 浏览: 6
c# oracle转starRocks(doris)建表语句
在C#中,你可以使用ADO.NET(Active Directory Object Model for .NET)来执行SQL语句并向Oracle数据库插入新数据。以下是步骤:
1. 首先,你需要添加Oracle的`ODP.NET`参考库到项目。如果你使用NuGet包管理器,可以搜索并安装`Oracle.ManagedDataAccess`。
2. 创建一个`OracleConnection`对象,提供连接字符串,它应包含数据库的服务器地址、端口、服务名以及用户名和密码:
```csharp
using Oracle.ManagedDataAccess.Client;
string connectionString = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=your_server)(PORT=your_port))(CONNECT_DATA=(SERVICE_NAME=your_service_name)));User Id=your_username;Password=your_password;";
OracleConnection connection = new OracleConnection(connectionString);
```
3. 打开数据库连接:
```csharp
connection.Open();
```
4. 使用`OracleCommand`创建一个命令对象,并设置SQL插入语句。假设你要插入的数据存储在一个`DataRow`或`DataTable`中:
```csharp
string sqlInsert = "INSERT INTO your_table (column1, column2, ...) VALUES (:1, :2, ...)";
OracleCommand command = new OracleCommand(sqlInsert, connection);
command.Parameters.Add(new OracleParameter(":1", OracleDbType.Varchar2, ParameterDirection.Input, your_data[0])); // 替换为实际数据
// 对其他列做类似处理
```
5. 执行SQL语句:
```csharp
int rowsAffected = command.ExecuteNonQuery(); // 插入操作不会返回主键值
```
6. 要获取刚插入记录的主键ID,你通常需要有一个序列(如Oracle的`SEQUENCE`)或者通过查询自增字段得到。这取决于你的表设计。例如,如果你有一个名为`your_sequence`的序列,可以这样获取:
```csharp
string sequenceName = "your_sequence";
OracleCommand sequenceCmd = new OracleCommand($"SELECT {sequenceName}.nextval FROM dual", connection);
object nextVal = sequenceCmd.ExecuteScalar();
```
7. 关闭连接:
```csharp
connection.Close();
```
阅读全文