string connectString = "Data Source=ydd;User ID=ydd;password=aaa";
        /// <summary>
        /// ear_id表的主键,ear:blob/clob型字段,用于存放电子档案
        /// </summary>
        string sqlAr_e = "Select ear_id, seq_dir, ear_name,"
                                    +" ear_tp, ear_size, ear_date, ear_creator,"
                                    +" ear_desc, dply_no,ear from ar_e";/// <summary>
        /// 将本地文件存入DataSet提交到服务器
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnUp_Click(object sender, EventArgs e)
        {
            byte[] bFile = GetStreamBytes(txtPath.Text);//将电子档案转换成byte[]类型;            if (bFile == null)
            {
                return;
            }            DataRow drAr_E = dtAr_E.NewRow();
            drAr_E["EAR_ID"] = Guid.NewGuid().ToString();
            drAr_E["SEQ_DIR"] = DBNull.Value;
            drAr_E["EAR_NAME"] = txtE_Name.Text;//电子档案名称
            drAr_E["EAR_DESC"] = txtDesc.Text;//文件备注
            drAr_E["EAR_CREATOR"] = txtAuthor.Text;//创建人
            drAr_E["EAR_TP"] = txtFileType.Text;//文件类型,ru:txt,doc,xls
            drAr_E["EAR_SIZE"] = txtSize.Text;//文件大小
            drAr_E["EAR_DATE"] = ModifyDate.Value;//最近修改时间
            drAr_E["DPLY_NO"] = DBNull.Value;//序号
            drAr_E["IS_DELETED"] = DBNull.Value;//删除标志
            drAr_E["TS"] = DateTime.Now;//时间戳            drAr_E["EAR"] = bFile;//电子档案
            dtAr_E.Rows.Add(drAr_E);            SubmitData();
        }        /// <summary>
        /// 提交本地数据
        /// </summary>
        /// <returns></returns>
        private bool SubmitData()
        {
            try
            {                string strTableName = dsData.Tables[0].TableName.ToString();
                OracleConnection conn = new OracleConnection(connectString);
                OracleDataAdapter oda = new OracleDataAdapter(sqlAr_e, conn);                OracleCommandBuilder cmdOracle = new OracleCommandBuilder(oda);                conn.Open();                oda.InsertCommand = cmdOracle.GetInsertCommand();
                oda.UpdateCommand = cmdOracle.GetUpdateCommand();
                int iSucceedRowCounts = oda.Update(dsData, strTableName);
                conn.Close();                dsData.AcceptChanges();                MessageBox.Show("上传成功。", "成功提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return true;
            }
            catch (Exception ex)
            {
                if (DialogResult.Retry == MessageBox.Show("提交数据出错。原因如下:\n\n" + ex.Message, "出错提示", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error))
                {
                   return SubmitData();
                }
                else
                {
                    dsData.RejectChanges();
                    return true;
                }
            }
            
        }        /// <summary>
        /// 将指定文件转换成byte[],主要用于读写blob数据
        /// </summary>
        /// <param name="filePath">如果指定文件不存在,返回null</param>
        /// <returns></returns>
        public  byte[] GetStreamBytes(string filePath)
        {
            if (!File.Exists(filePath))
            {
                MessageBox.Show("文件不存在", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return null;
            }
            try
            {
                FileStream fileStream = new FileStream(filePath, FileMode.Open);
                byte[] streamBytes = new byte[fileStream.Length];
                fileStream.Read(streamBytes, 0, streamBytes.Length);
                fileStream.Close();                return streamBytes;
            }
            catch (Exception ex)
            {                if (DialogResult.Retry == MessageBox.Show("转换指定文件出错。原因如下:\n\n" + ex.Message+"\n\n是否重试?", "出错提示", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error))
                {
                    return GetStreamBytes(filePath);
                }
                else
                {
                    return null;
                }
            }
        }

解决方案 »

  1.   

    /// <summary>
            /// 全文检索
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnSearch_Click(object sender, EventArgs e)
            {
                string strFilter = GetFilter();            GetData(strFilter);
            }        /// <summary>
            /// 获取查询用的where子串
            /// </summary>
            /// <returns></returns>
            private string GetFilter()
            {
                ArrayList alFilters = SplitText(txtContent.Text,rbSpecial.Checked);
                 int iCount=alFilters.Count;             if (iCount == 0)
                 {
                     return null;
                 }             string strSubFilter = "";
                 for (int i = 0; i < iCount; i++)
                 {
                     strSubFilter += alFilters[i].ToString();                 if (i != iCount - 1)
                     {
                         strSubFilter += " or ";
                     }
                 }             string[] strFields = new string[] { "ear_name", "ear" };             string strFilter = "";
                int iLength=strFields.Length;
                for(int i=0;i<iLength;i++)
                {
                    strFilter += "contains(" + strFields[i] + ",'" + strSubFilter + "')>0";                if (i != iLength - 1)
                    {
                        strFilter += " or ";
                    }
                }
                return strFilter;
            }        /// <summary>
            /// 将输入的字符串去掉其中的特殊字符后拆分成n个子串,生成ArrayList返回
            /// </summary>
            /// <param name="strText"></param>
            /// <returns></returns>
            private ArrayList SplitText(string strText,bool bAll)
            {
                /*
                [^x] 匹配除了x以外的任意字符
                [^aeiou] 匹配除了aeiou这几个字母以外的任意字符
                */            string strReg = bAll ? " " : "[^A-Za-z0-9\u4e00-\u9fa5]";
                Regex r = new Regex(strReg); // Split on hyphens.
                string[] strFilters = r.Split(strText);            ArrayList alFilters = new ArrayList();
                
                foreach(string strFilter in strFilters)
                {
                    if (strFilter != "" && !alFilters.Contains( strFilter))
                    {
                        alFilters.Add(strFilter);
                    }
                }
                return alFilters;
            }        /// <summary>
            /// 获取数据
            /// </summary>
            /// <param name="strFilter"></param>
            /// <returns></returns>
            private bool GetData(string strFilter)
            {
                try
                {
                    strFilter = strFilter.Trim();                if (strFilter == "" || strFilter == null)
                    {
                        MessageBox.Show("请设置查询条件后再点击查询按钮!", "出错提示...", MessageBoxButtons.OK, MessageBoxIcon.Error);                    return false;
                    }                string sqlCmdText = sqlAr_e+" where "+strFilter;                OracleConnection conn = new OracleConnection(connectString);
                    OracleCommand cmd = new OracleCommand(sqlCmdText, conn);
                    OracleDataAdapter oda = new OracleDataAdapter(cmd);
                    conn.Open();                oda.Fill(dsData, "ar_e");                conn.Close();                return true;
                }
                catch (Exception ex)
                {
                    if (DialogResult.Retry == MessageBox.Show("获取数据出错。原因如下:\n\n" + ex.Message + "\n\n是否重试?", "出错提示", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error))
                    {
                        return GetData(strFilter);
                    }
                    else
                    {
                        if (dsData != null)
                        {
                            dsData.RejectChanges();
                        }
                        return false;
                    }
                }
            }
      

  2.   

    楼主,我现在也遇到同样的问题了。不过目前的最新问题是.文件DOC格式的存不到CLOB中间去.
    提示为:对象必须实现 IConvertible
    我是直接循环插入数据的所以不能提交到DATASET里.楼主如果有类似经验的话.
    请帮忙,我代码如下: insertsql="insert into CORATTACH_INDEX(ATTACHID,TABLEID,RECORDID,TRUENAME,SEARCHTYPE,ATT_CONTENT)values('"+ATTACHID+"','"+TABLEID+"','"+RECORDID+"','"+TRUENAME+"',1,EMPTY_CLOB())";           
    try
    {
    objoa.RunSqlString(insertsql);
    }
    catch(Exception error)
    {
    this.Response.Write(error.Message+"11111111111111111");
    } FileStream   fsInfo = new  FileStream( Server.MapPath(ATTACHURL).ToString(), FileMode.Open, FileAccess.Read );
    StreamReader  srInfo  =  new StreamReader( fsInfo, System.Text.Encoding.GetEncoding( "GB2312" ) );
    srInfo.BaseStream.Seek( 0, SeekOrigin.Begin );
    byte[] streambytes=new byte[fsInfo.Length];
    fsInfo.Read(streambytes,0,Convert.ToInt32(fsInfo.Length));

    try
    {
    string updatesql="select ATT_CONTENT into myclob from corattach_index where attachid='"+ATTACHID+"' FOR UPDATE";
    //string updatesql="update corattach_index set ATT_CONTENT=@txtcontent where attachid='"+ATTACHID+"'";
    Connection.Open();
    OracleCommand cmd=new OracleCommand(updatesql,Connection);
    OracleParameter op=new OracleParameter("@txtcontent",OracleType.Clob);
    op.Value=streambytes;
    cmd.Parameters.Add(op);
    cmd.ExecuteNonQuery();
    this.Response.Write("插入TXT文档成功");
    Connection.Close();

    }
    catch(Exception error)
    {

    this.Response.Write(error.Message+"txt插入出错了 ");
    }