OracleDataAdapter Class

此博客展示了一段C#代码,利用OracleDataAdapter更新数据集。代码中创建了适配器,获取连接,设置更新命令,填充数据集,获取数据表和行,更新数据行中的工资信息,最后使用适配器更新EMPINFO表。

// C#
public static void AdapterUpdate(string connStr)
{
string cmdStr = "SELECT EMPNO, EMPNAME, SALARY FROM EMPINFO";

//create the adapter with the selectCommand txt and the
//connection string
OracleDataAdapter adapter = new OracleDataAdapter(cmdStr, connStr);

//get the connection from the adapter
OracleConnection connection = adapter.SelectCommand.Connection;

//create the UpdateCommand object for updating the EMPINFO table
//from the dataset
adapter.UpdateCommand = new OracleCommand(
"UPDATE EMPINFO SET SALARY = "+ " :iSALARY where EMPNO = :iEMPNO", connection);
adapter.UpdateCommand.Parameters.Add(":iSALARY", OracleDbType.Double,0, "SALARY");
adapter.UpdateCommand.Parameters.Add(":iEMPNO", OracleDbType.Int16,0, "EMPNO");

//Create and fill the DataSet using the EMPINFO
DataSet dataset = new DataSet();
adapter.Fill(dataset, "EMPINFO");

//Get the EMPINFO table from the dataset
DataTable table = dataset.Tables["EMPINFO"];

//Get the first row from the EMPINFO table
DataRow row0 = table.Rows[0];

//update the salary in the first row
row0["SALARY"] = 99999.99;

//Now update the EMPINFO using the adapter, the salary
//of ’KING’ is changed to 99999.99
adapter.Update(dataset, "EMPINFO");
}

 

using System; using System.Collections.Generic; using System.Linq; //using System.Web; //using TUV.LIMS.DLL; using Oracle.DataAccess.Client; using System.Data; using System.IO; using System.Reflection; using System.Configuration; using TUV.LIMS.DLL; namespace TUV.LIMS.EDIAPI.Models { public class GetDataForEDI { //private readonly string dir_raw = @"C:\Log\WS_ZLabel\{0}\{1}"; private readonly string dir_raw = @"C:\Log\EDIAPI\{0}\{1}"; public static Oracle.DataAccess.Client.OracleConnection CreateODPInstance() { return new Oracle.DataAccess.Client.OracleConnection(ConfigurationManager.ConnectionStrings["LIMS_ODP"].ConnectionString); } public List<OutputRecord> GetReportData(InputRecord record) { OracleConnection conn = ConnectionHelper.CreateODPInstance(); Oracle.DataAccess.Client.OracleCommand _cmd = new Oracle.DataAccess.Client.OracleCommand("PKG_TEST_API.GET_DATA_FOR_EDI_NEW", conn); _cmd.CommandType = CommandType.StoredProcedure; //_cmd.BindByName = true; #region parameters _cmd.Parameters.Add("V_TEST_END_DATE_FROM", OracleDbType.Date).Value = record.TEST_END_DATE_FROM; _cmd.Parameters.Add("V_TEST_END_DATE_TO", OracleDbType.Date).Value = record.TEST_END_DATE_TO; OracleParameter p1 = new OracleParameter(); p1.UdtTypeName = "NUMERICARRAY"; p1.OracleDbType = OracleDbType.Array; p1.ParameterName = "V_CUSTOMER_NUMBER"; if (record.CUSTOMER_NUMBER.Count == 0) p1.Value = DBNull.Value; else p1.Value = record.CUSTOMER_NUMBER.Select(x => Convert.ToDecimal(x)).ToArray(); _cmd.Parameters.Add(p1); _cmd.Parameters.Add("V_KC_TYPE", OracleDbType.Varchar2).Value = record.KEY_CLIENT; _cmd.Parameters.Add("ITEMS_CURSOR", OracleDbType.RefCursor).Direction = ParameterDirection.Output; #endregion Oracle.DataAccess.Client.OracleDataAdapter da = new Oracle.DataAccess.Client.OracleDataAdapter(_cmd); DataTable dt = new DataTable(); da.Fill(dt); return CovertDataSetToEntity<OutputRecord>(dt); } public void logOutputToFile(InputRecord inputRecord, Output output) { DateTime dt = DateTime.Now; //var dir = @"C:\Log\"; // folder location string fileName = dt.ToString("yyyyMMdd HHmmss") + ".txt", year = dt.ToString("yyyy"), month = dt.ToString("MM"), day = dt.ToString("dd"); string path = string.Format(dir_raw, year, month); if (!Directory.Exists(path)) // if it doesn't exist, create Directory.CreateDirectory(path); string fileStr1 = Path.Combine(path, fileName); List<string> msgs = new List<string>() { "Input:", "TEST_END_DATE_FROM: " + inputRecord.TEST_END_DATE_FROM, "TEST_END_DATE_TO: " + inputRecord.TEST_END_DATE_TO, "CUSTOMER_NUMBER: " + string.Join(",", inputRecord.CUSTOMER_NUMBER), "CUSTOMER_NAME:" + inputRecord.KEY_CLIENT, Environment.NewLine, "Output:", "Code: " + output.ERROR_CODE }; if (output.ERROR_CODE == "E") msgs.Add("Error Message: " + output.ERROR_MESSAGE); else { msgs.Add("IPMS_ORDER_NO: " + (output.OUTPUT_ARRAY.Count == 0 ? "None" : string.Join(",", output.OUTPUT_ARRAY.Select(x => x.SAP_ORDER_NO).Distinct().OrderBy(x => x)))); } File.WriteAllText(fileStr1, string.Join(Environment.NewLine, msgs)); } #region Methods to convert DataTable to Class private static List<T> CovertDataSetToEntity<T>(DataTable dt) where T : class, new() { List<PropertyInfo> propertyInfoList = GetModelPropertyList<T>(); List<T> entityList = new List<T>(dt.Rows.Count); T entity; foreach (DataRow dr in dt.Rows) { entity = new T(); FillFieldsValue<T>(dr, entity, propertyInfoList); entityList.Add(entity); } return entityList; } private static List<PropertyInfo> GetModelPropertyList<T>() { Type entityType = typeof(T); PropertyInfo[] props = entityType.GetProperties(); List<PropertyInfo> propertyInfoList = new List<PropertyInfo>(props); return propertyInfoList; } private static void FillFieldsValue<T>(DataRow dr, T entity, List<PropertyInfo> fieldNameList) { HashSet<string> columns = new HashSet<string>(dr.Table.Columns.Cast<DataColumn>().Select(x => x.ColumnName.ToUpper()).ToList<string>()); foreach (PropertyInfo propertyInfo in fieldNameList) { String fieldName = propertyInfo.Name; if (columns.Contains(fieldName.ToUpper())) { Object fieldValue = dr[fieldName]; ProcessFieldValueToEntity<T>(ref entity, fieldValue, propertyInfo); } } } private static void ProcessFieldValueToEntity<U>(ref U entity, object fieldValue, PropertyInfo pInfo) { //Check the fieldValue whether is match the Property Type. //if Property Type is Generic Type, (means Nullable<int>) then return value is int type. Type pType = CheckFieldValueType(fieldValue, pInfo.PropertyType, pInfo.Name); pInfo.SetValue(entity, GetFieldValue(fieldValue, pType), null); } private static Type CheckFieldValueType(object fieldValue, Type pType, string propName) { if (pType.IsGenericType) { pType = pType.GetGenericArguments()[0]; return CheckFieldValueType(fieldValue, pType, propName); } else { // if it is number type, return decimal if (fieldValue.GetType() == typeof(double) || fieldValue.GetType() == typeof(decimal) || fieldValue.GetType() == typeof(Int16) || fieldValue.GetType() == typeof(Int32) || fieldValue.GetType() == typeof(Int64)) return pType; else if (fieldValue.GetType() == pType) return pType; else if (Type.GetTypeCode(fieldValue.GetType()) == TypeCode.DBNull) return typeof(DBNull); else throw new InvalidCastException(string.Format("Can not convert filedValue type \"{0}\" to Property \"{1}\"'s Type \"{2}\".", fieldValue.GetType().Name, propName, pType.Name)); } } private static object GetFieldValue(object fieldValue, Type propType) { if (fieldValue == DBNull.Value || fieldValue.ToString().Length == 0) return null; else return Convert.ChangeType(fieldValue, propType); } #endregion } }
最新发布
12-10
public static IDbConnection GetConnection(DataProvider providerType) { IDbConnection iDbConnection; switch (providerType) { case DataProvider.SqlServer: iDbConnection = new SqlConnection(); break; case DataProvider.OleDb: iDbConnection = new OleDbConnection(); break; case DataProvider.Odbc: iDbConnection = new OdbcConnection(); break; case DataProvider.Oracle: iDbConnection = new OracleConnection(); break; case DataProvider.MySql: iDbConnection = new MySqlConnection(); break; default: return null; } return iDbConnection; } public static IDbCommand GetCommand(DataProvider providerType) { switch (providerType) { case DataProvider.SqlServer: return new SqlCommand(); case DataProvider.OleDb: return new OleDbCommand(); case DataProvider.Odbc: return new OdbcCommand(); case DataProvider.Oracle: return new OracleCommand(); case DataProvider.MySql: return new MySqlCommand(); default: return null; } } public static IDbDataAdapter GetDataAdapter(DataProvider providerType) { switch (providerType) { case DataProvider.SqlServer: return new SqlDataAdapter(); case DataProvider.OleDb: return new OleDbDataAdapter(); case DataProvider.Odbc: return new OdbcDataAdapter(); case DataProvider.Oracle: return new OracleDataAdapter(); case DataProvider.MySql: return new MySqlDataAdapter(); default: return null; } } public static IDbTransaction GetTransaction(DataProvider providerType) { IDbConnection iDbConnection = GetConnection(providerType); IDbTransaction iDbTransaction = iDbConnection.BeginTransaction(); return iDbTransaction; } public static IDbDataParameter[] GetParameters(DataProvider providerType, int paramsCount) { IDbDataParameter[] idbParams = new IDbDataParameter[paramsCount]; switch (providerType) { case DataProvider.SqlServer: for (int i = 0; i < paramsCount; i++) { idbParams[i] = new SqlParameter(); } break; case DataProvider.OleDb: for (int i = 0; i < paramsCount; i++) { idbParams[i] = new OleDbParameter(); } break; case DataProvider.Odbc: for (int i = 0; i < paramsCount; i++) { idbParams[i] = new OdbcParameter(); } break; case DataProvider.Oracle: for (int i = 0; i < paramsCount; i++) { idbParams[i] = new OracleParameter(); } break; case DataProvider.MySql: for (int i = 0; i < paramsCount; i++) { idbParams[i] = new MySqlParameter(); } break; default: idbParams = null; break; } return idbParams; } }
11-26
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值