请问如何在.net存取Oracle中的LONG ROW型字段,想用它来存取图片,在线等,解决就给分!!!

lr2651 2004-11-12 09:17:49
请问如何在.net存取Oracle中的LONG ROW型字段,想用它来存取图片,在线等,解决就给分!!!
...全文
191 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
redebug 2004-11-29
  • 打赏
  • 举报
回复
long row类型的数据存取我都是通过DataTable来操作的。
byte[] b_Excel = new byte[this.File1.PostedFile.ContentLength];
this.File1.PostedFile.InputStream.Read(b_Excel,0,this.File1.PostedFile.ContentLength);
dr_new["HEAD_EXCEL"] = b_Excel;
System.Data.OracleClient.OracleConnection oc_new = new System.Data.OracleClient.OracleConnection(this.at_tool.s_ConnectString);
oc_new.Open();
System.Data.OracleClient.OracleDataAdapter oda_new = new System.Data.OracleClient.OracleDataAdapter("select * from TABLE_HEAD where TABLE_NAME ='" + this.s_TableName + "' and TABLE_TYPE = '" + s_TableType + "'",new System.Data.OracleClient.OracleConnection(this.at_tool.s_ConnectString));
System.Data.OracleClient.OracleCommandBuilder ocb_new = new System.Data.OracleClient.OracleCommandBuilder(oda_new);
ocb_new.RefreshSchema();

try
{
oda_new.Update(ds_target,"TABLE_HEAD");
Response.Write("<script>alert('提交数据成功!');</script>");
return;
}
goody9807 2004-11-29
  • 打赏
  • 举报
回复
System.Data.OleDb.OleDbConnection Con = new System.Data.OleDb.OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;" +

"Integrated Security=SSPI;Initial Catalog=northwind");

System.String SqlCmd = "INSERT INTO Images (Image, ContentType, ImageDescription, ByteSize) VALUES (?, ?, ?, ?)";

System.Data.OleDb.OleDbCommand OleDbCmdObj = new System.Data.OleDb.OleDbCommand(SqlCmd, Con);

OleDbCmdObj.Parameters.Add("@Image", System.Data.OleDb.OleDbType.Binary, FileLength).Value = FileByteArray;

OleDbCmdObj.Parameters.Add("@ContentType", System.Data.OleDb.OleDbType.VarChar,50).Value = UpFile.ContentType;

OleDbCmdObj.Parameters.Add("@ImageDescription", System.Data.OleDb.OleDbType.VarChar,100).Value = txtDescription.Text;

OleDbCmdObj.Parameters.Add("@ByteSize", System.Data.OleDb.OleDbType.VarChar,100).Value = UpFile.ContentLength;

Con.Open();

OleDbCmdObj.ExecuteNonQuery();

Con.Close();


以上代码中,首先建立了一个到SQL Server的数据库链接;然后,建立了一个数据插入的OleDbCommand,注意一点,在建立这个OleDbCommand的时候,我们这里没有使用“@”标志而是使用“?”来代替输入变量。

另外,对于SQL.NET而言,因为其提供了一个SqlDbType.Image的数据类型,该类型对数据限制大小为:2,147,483,647,相信绝大部分用户不会上传这样大的文件,因此,可以直接使用以下语句:

MySqlCmd.Parameters.Add("@Image", SqlDbType.Image).Value = FileByteArray

而在OleDb.NET中,是没有这样类型定义的,我们只能使用OleDbType.Binary类型,这样,对于上传的限制就是8000字节,如果上传文件大于该限制,就会出错,因此,在使用OleDb.NET的时候,我们就必须很清楚的设置上传文件的大小,代码如下:

OleDbCmdObj.Parameters.Add("@Image", System.Data.OleDb.OleDbType.Binary, FileLength).Value = FileByteArray

goody9807 2004-11-29
  • 打赏
  • 举报
回复
在以上数据提交界面,我们并没有看到任何对于数据库的处理,这就是ASP.NET编程的好处之一,这里使用了Code Behind技术,就是将一些功能模块设计成为一个类,在这个类中实现需要的功能,我们可以看到,页面代码开头的代码:<%@ Page Inherits="UploadSample.Main" SRC="Upload.cs"%>就是继承了上传图像的类,所有我们上传图像需要的处理就在这里实现。该类的源文件如下:

namespace UploadSample {


public class Main : System.Web.UI.Page {


protected System.Web.UI.HtmlControls.HtmlInputFile UP_FILE;

protected System.Web.UI.WebControls.TextBox txtDescription;

protected System.Web.UI.WebControls.Label txtMessage;

protected System.Int32 FileLength = 0;


protected void Button_Submit(System.Object sender, System.EventArgs e) {

System.Web.HttpPostedFile UpFile = UP_FILE.PostedFile;

FileLength = UpFile.ContentLength;


try {


if (FileLength == 0) {


txtMessage.Text = "<b>*请选择上传的文件</b>";


} else {


System.Byte[] FileByteArray = new System.Byte[FileLength];

System.IO.Stream StreamObject = UpFile.InputStream;

StreamObject.Read(FileByteArray,0,FileLength);

System.Data.OleDb.OleDbConnection Con = new System.Data.OleDb.OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;" +

"Integrated Security=SSPI;Initial Catalog=northwind");

System.String SqlCmd = "INSERT INTO Images (Image, ContentType, ImageDescription, ByteSize) VALUES (?, ?, ?, ?)";

System.Data.OleDb.OleDbCommand OleDbCmdObj = new System.Data.OleDb.OleDbCommand(SqlCmd, Con);

OleDbCmdObj.Parameters.Add("@Image", System.Data.OleDb.OleDbType.Binary, FileLength).Value = FileByteArray;

OleDbCmdObj.Parameters.Add("@ContentType", System.Data.OleDb.OleDbType.VarChar,50).Value = UpFile.ContentType;

OleDbCmdObj.Parameters.Add("@ImageDescription", System.Data.OleDb.OleDbType.VarChar,100).Value = txtDescription.Text;

OleDbCmdObj.Parameters.Add("@ByteSize", System.Data.OleDb.OleDbType.VarChar,100).Value = UpFile.ContentLength;

Con.Open();

OleDbCmdObj.ExecuteNonQuery();

Con.Close();

txtMessage.Text = "<p><b>* 图片上传成功!</b>";


}


} catch (System.Exception ex) {


txtMessage.Text = ex.Message.ToString();


}

}

}

}

goody9807 2004-11-29
  • 打赏
  • 举报
回复
<%@ Page Inherits="UploadSample.Main" SRC="Upload.cs"%>

<HTML>

<BODY>

<FORM  ENCTYPE="multipart/form-data" RUNAT="server" ID="Form1">

<h1>

试验:<FONT COLOR="BLUE">System.Data.OleDb</FONT>

</h1>

<TABLE RUNAT="server" WIDTH="700" ALIGN="left" ID="Table1">

<TR>

<TD>

<B>图像文件:</B>

</TD>

<TD>

<INPUT TYPE="file" ID="UP_FILE" RUNAT="server" STYLE="Width:320" ACCEPT="text/*" NAME="UP_FILE">

</TD>

</TR>

<TR>

<TD>

<b>文件描述:</b>

</TD>

<TD>

<asp:TextBox RUNAT="server" WIDTH="239" ID="txtDescription" MAINTAINSTATE="false" />

</TD>

</TR>

<TR>

<TD>

<asp:Label RUNAT="server" ID="txtMessage" FORECOLOR="red" MAINTAINSTATE="false" />

</TD>

<TD>

<asp:Button RUNAT="server" WIDTH="239" ONCLICK="Button_Submit" TEXT="上传" />

</TD>

</TR>

</TABLE>

</FORM>

</BODY>

</HTML>


在以上的代码中,我们需要注意,在页面表单部分,注意加入:ENCTYPE="multipart/form-data",这与一般的表单不同;另外,以下代码用来实现选择文件的输入框:<INPUT TYPE="file" ID="UP_FILE" RUNAT="server" STYLE="Width:320" ACCEPT="text/*" NAME="UP_FILE">。

lr2651 2004-11-29
  • 打赏
  • 举报
回复
高手怎么都不屑回答吗?分不够再加,谢谢!!!
zhuyaowei 2004-11-13
  • 打赏
  • 举报
回复
当成二进制操作就可以。
叶子哟 2004-11-12
  • 打赏
  • 举报
回复
没用过o!想用,没机会

62,046

社区成员

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

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

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

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