[C#]使用Oracle.ManagedDataAccess與dapper來跟Oracle做溝通
前言
Oracle說實在的跟C#結合坑真的還不少,比如說32位元或64位元的問題會造成無法連接的問題等等,而Oracle.ManagedDataAccess是Oracle後來為了.net出的package,造福了後來寫Oracle的.net工程師,至於Dapper則是stack overflow專用針對ado.net包裝的非常好用的package,那就來看看如何做結合吧。
安裝Oracle.ManagedDataAccess
安裝Dapper
接著先來新增資料吧,這邊用到的是之前介紹過的BOGUS來快速新增假資料
public class OracleController : ApiController
{
public IDbConnection GetConnection //回傳OracleConnection
{
get
{
string connString = "Data source=localhost/book;User id=your account;Password=your pwd;";
return new OracleConnection(connString);
}
}
public async Task<IHttpActionResult> Get() //取得資料
{
using (var con = GetConnection)
{
var dao = con.QueryAsync<EmployeeDto>("SELECT id,name,address,phone_number as phoneNumber FROM EMPLOYEE");
var companyResult = con.QueryAsync<CompanyDto>("SELECT id,companyName FROM company");
return Ok(new { Employee = await dao, Companys = await companyResult });
}
}
public async Task<IHttpActionResult> Post() //新增假資料,各新增一百筆
{
var faker = new Faker("en"); //使用BOGUS,設定為英文版
var employees = new List<EmployeeDto>();
var companys = new List<CompanyDto>();
for (int i = 0; i < 100; i++)
{
employees.Add(new EmployeeDto
{
Address = faker.Address.City(),
Name = faker.Name.FirstName(),
PhoneNumber = faker.Random.Replace("092#######")
});
companys.Add(new CompanyDto
{
CompanyName = faker.Company.CompanyName()
});
}
using (TransactionScope scope = new TransactionScope()) //要自己加入參考 System.Transactions
{
using (var con = GetConnection) //使用屬性來得到IDbConnection
{
var task1 = con.ExecuteAsync("EMPLOYEE_CREATE",
employees.Select(x => new { Address = x.Address, Name = x.Name, PhoneNumber = x.PhoneNumber }),
commandType: CommandType.StoredProcedure);
var task2 = con.ExecuteAsync("COMPANY_CREATE",
companys.Select(x => new { CompanyName = x.CompanyName }),
commandType: CommandType.StoredProcedure);
await task1;
await task2;
scope.Complete();
return Ok();
}
}
}
}
我先去取得資料,証明目前資料庫是沒有資料,然後按POST去新增一百筆資料,最後再取得資料顯示出來
結論
簡單記錄一下用C#跟oracle溝通的部份,算是很初學者入門的,如果不想理解其他的部份,其實只要著重在dapper和oracle連線的部份,接下來有時間再整理一下使用nanoprofiler整合的部份,如果有任何錯誤再請指教。