【C#,Oracle】用批量插入和修改Oracle数据库多条数据
2018-03-27 18:04
2376 查看
问题描述:之前和同事做一个BS模式的项目,发现所用的框架模板在update数据库数据时,即使只update一个数据,该模板也会把表所对应的实体类里的所有参数一并写入update语句中,造成大量的资源浪费,因此自己琢磨了一下,写了一个只针对要修改的参数写入update语句。如有其他好的建议方法望不吝赐教.
参数说明:tablename,要插入的表名。
par, 数据的在数据库中的列名和要update的新值组成的hashtable键值对。因为项目中经常需要修改的参数类型涉及到诸如number,char,blob,datetime等,因此在传入参数名称与新值时使用了hashtable,虽然hashtable需要装拆箱,每次都需要对key值进行转换,但是在OracleParameter方法中,value正好对应其传入类型。如果update的数据类型比较单一则这里的hashtable可以改用dictionary
qua,插入的条件名和对应的条件值组成的hashtable键值对。条件类型如果比较单一,则可改用dictionary
PS:在拼接语句时一定要注意不要少了空格,空格,空格 重要的事情说三遍 /// <summary>
/// 修改数据
/// </summary>
/// <param name="tableName">表名</param>
/// <param name="par">新值</param>
/// <param name="qua">条件</param>
/// <returns></returns>
public static bool UpDateOrc(string tableName, Hashtable par, Hashtable qua)
{
string sql = " update " + tableName + " set ";
using (OracleConnection conn = new OracleConnection(ConnectWebOracle))
{
List<OracleParameter> parList = new List<OracleParameter>();
foreach (DictionaryEntry p in par)
{
string pName = p.Key.ToString();
sql += " " + pName + "=";
sql += ":" + pName + " ,";
OracleParameter opa = new OracleParameter(":" + pName, p.Value);
parList.Add(opa);
}
sql = sql.TrimEnd(',');
sql += " where 1=1";
foreach (DictionaryEntry q in qua)
{
string qName = q.Key.ToString();
sql += " and " + qName + "=";
sql += ":" + qName + " ";
OracleParameter opa = new OracleParameter(":" + qName, q.Value);
parList.Add(opa);
}
try
{
conn.Open();
OracleCommand cmd = new OracleCommand(sql, conn);
foreach (var p in parList)
{
cmd.Parameters.Add(p);
}
int result = cmd.ExecuteNonQuery();//result接收受影响行数,也就是说result大于0的话表示添加成功
conn.Close();
cmd.Dispose();
if (result <= 0)
{
return false;//修改失败
}
return true;//修改成功
参数说明:tablename,要插入的表名。
par, 数据的在数据库中的列名和要update的新值组成的hashtable键值对。因为项目中经常需要修改的参数类型涉及到诸如number,char,blob,datetime等,因此在传入参数名称与新值时使用了hashtable,虽然hashtable需要装拆箱,每次都需要对key值进行转换,但是在OracleParameter方法中,value正好对应其传入类型。如果update的数据类型比较单一则这里的hashtable可以改用dictionary
qua,插入的条件名和对应的条件值组成的hashtable键值对。条件类型如果比较单一,则可改用dictionary
PS:在拼接语句时一定要注意不要少了空格,空格,空格 重要的事情说三遍 /// <summary>
/// 修改数据
/// </summary>
/// <param name="tableName">表名</param>
/// <param name="par">新值</param>
/// <param name="qua">条件</param>
/// <returns></returns>
public static bool UpDateOrc(string tableName, Hashtable par, Hashtable qua)
{
string sql = " update " + tableName + " set ";
using (OracleConnection conn = new OracleConnection(ConnectWebOracle))
{
List<OracleParameter> parList = new List<OracleParameter>();
foreach (DictionaryEntry p in par)
{
string pName = p.Key.ToString();
sql += " " + pName + "=";
sql += ":" + pName + " ,";
OracleParameter opa = new OracleParameter(":" + pName, p.Value);
parList.Add(opa);
}
sql = sql.TrimEnd(',');
sql += " where 1=1";
foreach (DictionaryEntry q in qua)
{
string qName = q.Key.ToString();
sql += " and " + qName + "=";
sql += ":" + qName + " ";
OracleParameter opa = new OracleParameter(":" + qName, q.Value);
parList.Add(opa);
}
try
{
conn.Open();
OracleCommand cmd = new OracleCommand(sql, conn);
foreach (var p in parList)
{
cmd.Parameters.Add(p);
}
int result = cmd.ExecuteNonQuery();//result接收受影响行数,也就是说result大于0的话表示添加成功
conn.Close();
cmd.Dispose();
if (result <= 0)
{
return false;//修改失败
}
return true;//修改成功
} catch (Exception e) { MessageBox.show(e.Message); return false; } } }
/// <summary> /// 插入学员数据 /// </summary> public static bool InsertTB(string tableName, Hashtable ht) { string sq1 = " insert into " + tableName + " ( id,"; string sq2 = "values(c_data_id.nextval, ";//经常有人在写插入语句时插入失败,原因在于没有为当前的插入行的唯一键值赋值 //解决方法为在plsql查询工具里,找到sequence文件夹,创建一个递增参数,此处命名为‘c_data_id’,用如上方式写入插入语句即可插入成功 using (OracleConnection conn = new OracleConnection(ConnectWebOracle)) { List<OracleParameter> parList = new List<OracleParameter>(); foreach (DictionaryEntry p in ht) { sq1 += p.Key + ","; sq2 += ":" + p.Key + ","; OracleParameter opa = new OracleParameter(":" + p.Key, p.Value); parList.Add(opa); } sq1 = sq1.TrimEnd(','); sq1 += ")"; sq2 = sq2.TrimEnd(','); sq2 += ")"; string sql = sq1 + sq2; try { conn.Open(); OracleCommand cmd = new OracleCommand(sql, conn); foreach (var p in parList) { cmd.Parameters.Add(p); } int result = cmd.ExecuteNonQuery();//result接收受影响行数,也就是说result大于0的话表示添加成功 conn.Close(); cmd.Dispose(); if (result <= 0) { return fasle;//插入失败 } return true;//插入成功 } catch (Exception e) {MessageBox.show(e.Message); return false; } } }
相关文章推荐
- Oracle使用Mybatis实现批量插入或修改数据(Oracle)
- Oracle批量插入数据
- mysql 之 mybatis批量插入数据,批量修改
- c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)
- oracle使用子查询插入和修改数据
- Bat文件往oracle中批量插入数据
- 使用Oracle的存储过程批量插入数据
- Oracle 批量插入数据
- ORACLE 批量修改多列多行的数据
- oracle数据库零碎---Oracle Merge 使用,表中存在数据就修改,没有数据自动添加
- 使用MyBatis单条和批量插入数据到Oracle的表中
- 关于oracle批量插入数据遇到的问题
- oracle使用一条语句批量插入多条数据
- Java 批量插入数据(Oracle)
- oracle 存在数据修改 不存在数据插入 使用 MERGE INTO 解决
- Oracle occi 批量插入数据
- Oracle数据库在批量插入数据时提示 ORA-01653: 表 EP.EP*** 无法通过 128 (在表空间 EP 中) 扩展
- 批量向oracle插入数据
- Oracle 批量复制数据批量插入数据
- C# Oracle批量插入数据进度条的实现代码