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;
}
}
}
/// <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;
}
}
}
/// 全文检索
/// </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;
}
}
}
提示为:对象必须实现 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插入出错了 ");
}