番外-.net中将字符串保存到oracle数据库下CLOB类型的字段

当字符串长度超过4000字符时,需要使用Oracle的CLOB类型字段存储。文章描述了如何在.NET环境中,利用Oracle.ManagedDataAccess库处理和存储CLOB类型的字符串,包括新建数据库连接,将字符串转换为CLOB对象,以及在插入和更新数据时的参数设置和操作步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用场景:某字符串长度超过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;
            }
        }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木卯彳亍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值