怎样把整个文件的内容存到2进制类型的字段里,在线等待中,急急急!!

chengyayu9929 2003-09-30 09:52:32
我通过FileField控件选中一个文件,现在我要把选中的文件的内容
插入到数据库表中的一个BLOB型的字段里(我用的是oracle9i),
那个BLOB就是2进制型,
我不知该如何具体操作,请大家踊跃解答啊,多谢了!
...全文
29 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qimini 2003-09-30
  • 打赏
  • 举报
回复
昏,把你代码贴出来。我来改
chengyayu9929 2003-09-30
  • 打赏
  • 举报
回复
我对这个模板理解起来还很困难,大侠能写一段示例代码让我看看吗?多谢了!
qimini 2003-09-30
  • 打赏
  • 举报
回复
这是一个来自MS的标准Sample,不是实际的实现代码。你可参照这个写出各种实际的代码
(T-SQL语句、StoredProcedure)
qimini 2003-09-30
  • 打赏
  • 举报
回复
这里换成你的更新语句就可以了,他做的是一个临时变量来存放二进制流的
chengyayu9929 2003-09-30
  • 打赏
  • 举报
回复
楼上的大侠,我看不懂下面的代码,请详细解释以下,多谢!
cmd.CommandText = "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end;"
qimini 2003-09-30
  • 打赏
  • 举报
回复
Dim conn As New OracleConnection("server=Oracle;Uid=uid;pwd=pwd")
Dim filePath As String
Dim bigData As Byte()
Dim t As Date

t = Now

filePath = "C:\mytest.bmp" 'Add the path to the file you want to insert
If Not File.Exists(filePath) Then
' handle error
End If


Dim fs As Stream = _
File.OpenRead(filePath)
Dim tempBuff(fs.Length) As Byte

fs.Read(tempBuff, 0, fs.Length)
fs.Close()
conn.Open()

Dim tx As OracleTransaction
tx = conn.BeginTransaction()

Dim cmd As New OracleCommand()
cmd = conn.CreateCommand()

cmd.Transaction = tx

cmd.CommandText = "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end;"
cmd.Parameters.Add(New OracleParameter("tempblob", OracleType.Blob)).Direction = ParameterDirection.Output
cmd.ExecuteNonQuery()



Dim tempLob As OracleLob
tempLob = cmd.Parameters(0).Value
tempLob.BeginBatch(OracleLobOpenMode.ReadWrite)
tempLob.Write(tempBuff, 0, tempBuff.Length)
tempLob.EndBatch()



cmd.Parameters.Clear()
cmd.CommandText = "InsertBlob.TestBlobInsert"
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add(New OracleParameter("BlobParam", OracleType.Blob)).Value = tempLob
Try
cmd.ExecuteNonQuery()
Catch myex As Exception
MsgBox(myex.Message)
End Try
tx.Commit()
xinyu_1980 2003-09-30
  • 打赏
  • 举报
回复
gz
qimini 2003-09-30
  • 打赏
  • 举报
回复
昏,Oracle参数是

&符号+ParameterName

不是?也不是@符号+ParameterName

Sample:



SELECT CategoryID, CategoryName, Description
FROM Categories
WHERE CategoryID = &categoryid;
chengyayu9929 2003-09-30
  • 打赏
  • 举报
回复
qimini(循序渐进) 大哥,我只把我认为相关的代码贴出来,

//定义变量并初始化
string sSystype = edtSysType.KeyValue; //制度类型
string sTitle = txtTitle.Text; //标题
string sAuthor = txtAuthor.Text; //作者
string sSummary = txtSummary.Text; //主题词
string sPubDate = edtPubDate.Value; //颁布时间

//得到提交的文件
Stream fileDataStream = browse.PostedFile.InputStream;

//得到文件大小
int fileLength = browse.PostedFile.ContentLength;

//创建数组
byte[] fileData = new byte[fileLength];

//把文件流填充到数组
fileDataStream.Read(fileData,0,fileLength);


string InsertStr = "Insert into T_TrainSafeSystem(SYSTEMTYPE,SYSTEMTITLE,AUTHOR,THEMATICWORD,PRINTSMANTIME," +
"SYSTEMCONTENT,OPERATION_DATE,OPERATOR_ID)" +
" values(?,?,?,?,?,?,sysdate,'XYM')" ;

string ConnStr = ConfigurationSettings.AppSettings[0];
OleDbConnection objConn = new OleDbConnection(ConnStr);
OleDbCommand InsertCmd = new OleDbCommand(InsertStr,objConn);
InsertCmd.Parameters.Add(new OleDbParameter("@systype",OleDbType.VarChar,30,"SYSTEMTYPE"));
//制度类型
InsertCmd.Parameters["@systype"].Value = sSystype;
InsertCmd.Parameters.Add(new OleDbParameter("@title",OleDbType.VarChar,100,"SYSTEMTITLE"));

//标题
InsertCmd.Parameters["@title"].Value = sTitle;
InsertCmd.Parameters.Add(new OleDbParameter("@author",OleDbType.VarChar,30,"AUTHOR"));

//作者
InsertCmd.Parameters["@author"].Value = sAuthor;
InsertCmd.Parameters.Add(new OleDbParameter("@summary",OleDbType.VarChar,255,"THEMATICWORD"));
//主题
InsertCmd.Parameters["@summary"].Value = sSummary;
InsertCmd.Parameters.Add(new OleDbParameter("@pubdate",OleDbType.Date));
//颁布时间
InsertCmd.Parameters["@pubdate"].Value = DateTime.Parse(sPubDate);
InsertCmd.Parameters.Add(new OleDbParameter("@bytefile",OleDbType.VarBinary,fileLength,"SYSTEMCONTENT"));
//选择文件
InsertCmd.Parameters["@bytefile"].Value = fileData;

objConn.Open();
InsertCmd.ExecuteNonQuery();

编译时系统提示 语句 InsertCmd.ExecuteNonQuery(); 有错误:
ORA-03113: 通信通道的文件结束

大侠,到底错在哪里啊??

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧