快快快 SOS !!! 大文本如何插入数据库? http://www.akadia.com/services/dotnet_read_write_blob.html 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 acewang(龍芯*Inside!) 能否解释一下 用下列代码可以实现txt文件的正常入库,但是doc文件会出现乱码SqlConnection con=new SqlConnection(strConn2);string filename=UP_File.PostedFile.FileName;StreamReader sr=new StreamReader(filePath,Encoding.Default,true);String doc=sr.ReadToEnd();sr.Close();SqlCommand command=new SqlCommand();command.CommandType=CommandType.Text;command.Connection=con;command.CommandText="Update cx_jjsqb Set sqwj=@sqwj where bh=@maxbh";SqlParameter parambh=new SqlParameter("@maxbh",SqlDbType.Char,10);parambh.Value=maxbh;command.Parameters.Add(parambh);SqlParameter paramsqwj=new SqlParameter("@sqwj",SqlDbType.Text);paramsqwj.Value=doc;command.Parameters.Add(paramsqwj);con.Open();int RowsAffected=command.ExecuteNonQuery();con.Close(); http://xml.sz.luohuedu.net/xml/ShowList.asp?id=1参考一下孟子前辈的“所有格式文件存入SQL SERVER” ///专用于更新oracle大字段的方法///如果你的查询语句里有两个以上结果,将只更新第一行数据,并且应属于第二列,第一列是ID/// 因为我们在实际的使用过程中,一般会为有大字段的数据单独建一个表,通过一个ID来关联主表///</summary>public static bool UpdateLOBForOracle(string SQLStatement,string Content, OracleConnection conn,OracleTransaction Transaction){ bool bReturn = false; OracleCommand command = conn.CreateCommand(); if (Command.Connection.State != System.Data.ConnectionState.Open) { return false; } Command.Transaction = Transaction; Command.CommandText = SQLStatement; try { OracleDataReader reader = command.ExecuteReader(); using(reader) { OracleLob BLOB = reader.GetOracleLob(1) byte[] buffer = System.Text.Encoding.Unicode.GetBytes(Content); if (buffer.Length < BLOB.Length) { BLOB.SetLength(buffer.Length) } BLOB.Write(buffer,0,buffer.Length); bReturn = true; } } catch { bReturn = false; } finally { } return bReturn;}在实际的使用过程中,对于Insert有LOB类型的表,我首先Insert一条记录,把大字段赋值为空,再通过上面的UpdateLOBForOracle更新;对于Update有LOB类型的表,直接使用就可以了需要注意的是,事物的回滚和提交的时机实际使用例子:public bool InsertFile(string FName,string Content,out int FID){ bool bReturn = false; FID = 0; OracleConnection Connection = new OracleConnection("连接字符串") OracleCommand Command = Connection.CreateCommand(); if (Command.Connection.State != System.Data.ConnectionState.Open) { return false; } Command.Transaction = Command.Connection.BeginTransaction(); try { //先插入表中一条记录 if (InsertBLOB(out FID,string Name,connection,Command.Transction)) { //调用上面的方法 string SQL = "select FID,FContent from Table1 for Update where FID = ?" if (UpdateLOBForOracle(SQL,Content,connection,Command.Transction)) { bReturn = true; command.Transction.commit(); } else { bReturn = false; command.transction.Rollback(); } } else { bReturn = false; command.transction.Rollback(); } } catch { bReturn = false; command.transction.Rollback(); } finally { Command.Connection.Close(); } return bReturn;}我没有直接一次Insert有LOB类型的表的原因是直接做很容易出错,我现在用经过我测试还是比较稳定,基本没有出过错,速度也还可以;但这样做的缺点就是要在逻辑层控制连接和事物,不象其他的一般在数据层写好就可以不管连接和事物的处理了。还有,由于这里内网和外网是分开的,所以以上代码不是copy出来的,是我看着以前的代码敲的,所以有些语法上的错误,大家将就着看吧,欢迎大家指出缺点和改进,我的email:[email protected] 如果是对于SQLServer的image类型,处理起来就容易多了,直接把内容转换成二进制再insert或者update就可以了 KevinCao(我老婆很小)我非常感谢,可是我还有几个疑问OracleConnection ,OracleLob BLOB = reader.GetOracleLob(1)?我在asp.net中没看见,能否赐教 OracleLob类应该在System.Data.OracleClient命名空间中 没有System.Data.OracleClient命名空间中 那你看看你的framework版本是多少,我是用的1.1 KevinCao(我老婆很小),谢谢 求一条 SQL 语句 怎么使用正则表达式实现如下功能。 .net 验证码 请教一个简单的数组转换问题 求助:框架页面间刷新跳转问题! 孟子,思归等大虾帮小弟看看,按钮事件不能响应! AdRotator(广告循环器)怎么不能循环播放广告啊? 简单问题:requestEncoding取值"gb2312" 和"utf-8"分别指什么呢? 才鸟问题 急急急~~~ 在线等。。。。。。。。 讨论:是叶面分离好还是混合代码好? 用jmail发送邮件怎么挂附件呀? 请问高手关于datagrid的问题。
能否解释一下
SqlConnection con=new SqlConnection(strConn2);
string filename=UP_File.PostedFile.FileName;
StreamReader sr=new StreamReader(filePath,Encoding.Default,true);
String doc=sr.ReadToEnd();
sr.Close();
SqlCommand command=new SqlCommand();
command.CommandType=CommandType.Text;
command.Connection=con;
command.CommandText="Update cx_jjsqb Set sqwj=@sqwj where bh=@maxbh";
SqlParameter parambh=new SqlParameter("@maxbh",SqlDbType.Char,10);
parambh.Value=maxbh;
command.Parameters.Add(parambh);
SqlParameter paramsqwj=new SqlParameter("@sqwj",SqlDbType.Text);
paramsqwj.Value=doc;
command.Parameters.Add(paramsqwj);
con.Open();
int RowsAffected=command.ExecuteNonQuery();
con.Close();
参考一下孟子前辈的“所有格式文件存入SQL SERVER”
///如果你的查询语句里有两个以上结果,将只更新第一行数据,并且应属于第二列,第一列是ID
/// 因为我们在实际的使用过程中,一般会为有大字段的数据单独建一个表,通过一个ID来关联主表
///</summary>
public static bool UpdateLOBForOracle(string SQLStatement,string Content,
OracleConnection conn,OracleTransaction Transaction)
{
bool bReturn = false;
OracleCommand command = conn.CreateCommand();
if (Command.Connection.State != System.Data.ConnectionState.Open)
{
return false;
}
Command.Transaction = Transaction;
Command.CommandText = SQLStatement;
try
{
OracleDataReader reader = command.ExecuteReader();
using(reader)
{
OracleLob BLOB = reader.GetOracleLob(1)
byte[] buffer = System.Text.Encoding.Unicode.GetBytes(Content);
if (buffer.Length < BLOB.Length)
{
BLOB.SetLength(buffer.Length)
}
BLOB.Write(buffer,0,buffer.Length);
bReturn = true;
}
}
catch
{
bReturn = false;
}
finally
{
}
return bReturn;
}在实际的使用过程中,对于Insert有LOB类型的表,我首先Insert一条记录,把大字段赋值为空,再通过
上面的UpdateLOBForOracle更新;对于Update有LOB类型的表,直接使用就可以了
需要注意的是,事物的回滚和提交的时机
实际使用例子:
public bool InsertFile(string FName,string Content,out int FID)
{
bool bReturn = false;
FID = 0;
OracleConnection Connection = new OracleConnection("连接字符串")
OracleCommand Command = Connection.CreateCommand();
if (Command.Connection.State != System.Data.ConnectionState.Open)
{
return false;
}
Command.Transaction = Command.Connection.BeginTransaction();
try
{
//先插入表中一条记录
if (InsertBLOB(out FID,string Name,connection,Command.Transction))
{
//调用上面的方法
string SQL = "select FID,FContent from Table1 for Update where FID = ?"
if (UpdateLOBForOracle(SQL,Content,connection,Command.Transction))
{
bReturn = true;
command.Transction.commit();
}
else
{
bReturn = false;
command.transction.Rollback();
}
}
else
{
bReturn = false;
command.transction.Rollback();
}
}
catch
{
bReturn = false;
command.transction.Rollback();
}
finally
{
Command.Connection.Close();
}
return bReturn;
}我没有直接一次Insert有LOB类型的表的原因是直接做很容易出错,我现在用经过我测试还是比较稳定,基本
没有出过错,速度也还可以;但这样做的缺点就是要在逻辑层控制连接和事物,不象其他的一般在数据层写好
就可以不管连接和事物的处理了。
还有,由于这里内网和外网是分开的,所以以上代码不是copy出来的,是我看着以前的代码敲的,所以
有些语法上的错误,大家将就着看吧,欢迎大家指出缺点和改进,我的email:[email protected]
OracleConnection ,OracleLob BLOB = reader.GetOracleLob(1)?
我在asp.net中没看见,能否赐教
System.Data.OracleClient命名空间中