使用场景:某字符串长度超过4000,存到ORACLE数据库则需要使用CLOB类型字段。而又不能直接传入数据库,所以另外需要处理一下
1,准备:
(1)web.config中的数据库连接:
<add name="OracleDSN" connectionString="User ID=***;Password=***;Data Source=***/orcl" providerName="Robin.EntLib.Data.Oracle.OracleProvider"/>
(2)安装包 Oracle.ManagedDataAccess
(笔者.net framework为4,故安装了显示的最早的12.1.21)(哪里用到就安到哪里)
2,处理字符串值
这个OBJECTIDS的值就是要传递到数据库的字符串
string OBJECTIDS = request.Form["OBJECTIDS"];
处理一下:
char[] writeBuffer = OBJECTIDS.ToCharArray();
string constr = ConfigurationManager.ConnectionStrings["OracleDSN"].ConnectionString;
OracleConnection con = new OracleConnection(constr);
// 打开
con.Open();
//使用OracleClob类的构造函数,传入一个OracleConnection对象,创建一个新的CLOB对象
OracleClob clob = new OracleClob(con); // 假设con是一个已经打开的OracleConnection对象
// 将字符数组写入到CLOB对象中,从数组的第0个元素开始,写入数组的长度个元素
clob.Write(writeBuffer, 0, writeBuffer.Length);
InfoModel指的是要新增的表
InfoModel infoModel=new InfoModel ();
infoModel.NVFID = nvfid;
bool result = SaveInfo(infoModel,clob, con);
3,新增数据方法
…省略的部分是指InfoModel的其他字段
public static bool SaveInfo(InfoModel Model, OracleClob objectIdsClob, Oracle.ManagedDataAccess.Client.OracleConnection con)
{
try
{
using (Oracle.ManagedDataAccess.Client.OracleCommand cmd = new Oracle.ManagedDataAccess.Client.OracleCommand("INSERT INTO InfoModel (NVFID,...,OBJECTIDS) VALUES (:NVFID, ..., :OBJECTIDS)", con))
{
cmd.Parameters.Add(new Oracle.ManagedDataAccess.Client.OracleParameter("NVFID", Model.NVFID));
......
Oracle.ManagedDataAccess.Client.OracleParameter objectIdsParam = new Oracle.ManagedDataAccess.Client.OracleParameter("OBJECTIDS", OracleDbType.Clob);
objectIdsParam.Value = objectIdsClob;
cmd.Parameters.Add(objectIdsParam);
int rowsAffected = cmd.ExecuteNonQuery();
con.Close();
return rowsAffected == 1;
}
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
con.Close();
return false;
}
}
int rowsAffected = cmd.ExecuteNonQuery();
这一句查询是否发生了数据改变,如果有则值为1
4,更新数据方法
public static bool UpdateInfo(InfoModel pModel, OracleClob objectIdsClob, Oracle.ManagedDataAccess.Client.OracleConnection con)
{
try
{
string sql = "UPDATE InfoModel SET ABNUMBER = '"+ pModel.ABNUMBER+ "',"+...+"OBJECTIDS = :OBJECTIDS" + " WHERE NVFID = '" + pModel.NVFID+"'";
Oracle.ManagedDataAccess.Client.OracleCommand cmd = new Oracle.ManagedDataAccess.Client.OracleCommand(sql, con);
Oracle.ManagedDataAccess.Client.OracleParameter objectIdsParam = new Oracle.ManagedDataAccess.Client.OracleParameter("OBJECTIDS", OracleDbType.Clob);
objectIdsParam.Value = objectIdsClob;
cmd.Parameters.Add(objectIdsParam);
int rowsAffected = cmd.ExecuteNonQuery();
con.Close();
return (rowsAffected==1);
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
con.Close();
return false;
}
}