sos 在线等!

wjwsnow 2005-06-17 10:56:23
我写了一个关于图片上传到数据库里的例子,执行成功 但是插入数据库里的blob类型值为空????
还有这个方法总是执行两次??? 看init里的事件只定义一次,请各位大侠帮帮忙!
代码如下:
public void Button1_Click(object sender, System.EventArgs e)
{
HttpPostedFile UpFile =
this.Request.File[0] ; //UP_FILE.PostedFile HttpPostedFile对象,用于读取图象文件属性
FileLength = UpFile.ContentLength; //记录文件长度
string filePath = UpFile.FileName;
OracleConnection conn = null;
try
{
if (FileLength == 0)
{ //文件长度为零时
txtMessage.Text = "<b>请你选择你要上传的文件</b>";
}
else
{
//写到特定位置
//        string tmpFileName = myFile.FileName;
//        string myFileName = tmpFileName.Substring(tmpFileName.LastIndexOf("."));
//        string myFileMimeType = myFile.ContentType();
//        myFile.SaveAs(this.Server.MapPath("../" + myFileName));


Byte[] FileByteArray = new Byte[FileLength]; //图象文件临时储存Byte数组
Stream StreamObject = UpFile.InputStream; //建立数据流对像

//读取图象文件数据,FileByteArray为数据储存体,0为数据指针位置、FileLnegth为数据长度
StreamObject.Read(FileByteArray,0,FileLength);
StreamObject.Close();

conn = new OracleConnection(comm.Constant.OraString);
string SqlCmd = " insert into qjbtest(ID,thebmp)values(8,:mid)";

conn.Open();
OracleCommand myCommand = new OracleCommand();

myCommand.CommandText = SqlCmd;
myCommand.Parameters.Add(":mid",OracleType.Blob,FileLength);
myCommand.Parameters[":mid"].Value = FileByteArray;
myCommand.Connection = conn;

int num = myCommand.ExecuteNonQuery();

conn.Close();
if(num > 0)
{

txtMessage.Text = "<p><b>OK!你已经成功上传你的图片</b>";//提示上传成功
}
else
{
txtMessage.Text = "<p><b>SORRY!你的图片上传出错</b>";//提示上传出错
}
}
}
catch (Exception ex)
{
Response.Write(txtMessage.Text = ex.Message);
Response.End();
}
  finally
{
if(conn!=null)
{
conn.Close();
}
}

}
...全文
62 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjwsnow 2005-06-17
  • 打赏
  • 举报
回复
有哪为老兄 帮帮忙 急用!!!
wjwsnow 2005-06-17
  • 打赏
  • 举报
回复
我感觉和我的思路是一样的啊,为什么我插入的是空的且方法执行两次?!?!
WeekZero 2005-06-17
  • 打赏
  • 举报
回复
我写的一个,uploaddb.aspx里的内容:

<%@ Page language="c#" Codebehind="uploaddb.aspx.cs" AutoEventWireup="false" Inherits="localhost.upload.uploaddb" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>uploaddb</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" encType="multipart/form-data" runat="server">
<TABLE id="Table1" cellSpacing="0" cellPadding="0" width="700" align="left" border="0"
RUNAT="server">
<TR>
<TD>上传文件到数据库(选择你要上传的文件)</TD>
<TD><INPUT id="UP_FILE" style="WIDTH: 320px" type="file" accept="text/*" name="UP_FILE" RUNAT="server">
</TD>
</TR>
<TR>
<TD>文件说明(添加上传图片说明,如:作者、出处)  </TD>
<TD><asp:textbox id="txtDescription" RUNAT="server" WIDTH="239" MAINTAINSTATE="false"></asp:textbox></TD>
</TR>
<TR>
<TD><asp:label id="txtMessage" RUNAT="server" MAINTAINSTATE="false" FORECOLOR="red"></asp:label></TD>
<TD><asp:button id="Button1" RUNAT="server" WIDTH="239" TEXT="Upload Image"></asp:button></TD>
</TR>
</TABLE>
</form>
</body>
</HTML>


uploaddb.aspx.cs里的内容:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Configuration;
using System.IO;

namespace localhost.upload
{
/// <summary>
/// uploaddb 的摘要说明。
/// </summary>
public class uploaddb : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox txtDescription;
protected System.Web.UI.WebControls.Label txtMessage;
protected System.Web.UI.WebControls.Button Button1;

protected HtmlInputFile UP_FILE; //HtmlControl、WebControls控件对象
protected Int32 FileLength = 0;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Button1_Click(object sender, System.EventArgs e)
{
HttpPostedFile UpFile = UP_FILE.PostedFile; //HttpPostedFile对象,用于读取图象文件属性
FileLength = UpFile.ContentLength; //记录文件长度
try
{
if (FileLength == 0)
{ //文件长度为零时
txtMessage.Text = "<b>请你选择你要上传的文件</b>";
}
else
{
Byte[] FileByteArray = new Byte[FileLength]; //图象文件临时储存Byte数组

Stream StreamObject = UpFile.InputStream; //建立数据流对像

//读取图象文件数据,FileByteArray为数据储存体,0为数据指针位置、FileLnegth为数据长度

StreamObject.Read(FileByteArray,0,FileLength);
//建立SQL Server链接
SqlConnection Con = new SqlConnection(ConfigurationSettings.AppSettings["ConnStr"]);


String SqlCmd = "INSERT INTO uploaddb (pic,FileLength,ContentType,Description) VALUES (@Image,@FileLength,@ContentType,@Description)";
SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);
CmdObj.Parameters.Add("@Image",SqlDbType.Image, FileLength).Value = FileByteArray;
//记录文件类型
CmdObj.Parameters.Add("@ContentType", SqlDbType.VarChar,50).Value = UpFile.ContentType;
//把其它单表数据记录上传
CmdObj.Parameters.Add("@Description", SqlDbType.VarChar,200).Value = txtDescription.Text;
//记录文件长度,读取时使用
CmdObj.Parameters.Add("@FileLength", SqlDbType.BigInt,8).Value = UpFile.ContentLength;

Con.Open();
CmdObj.ExecuteNonQuery();
Con.Close();
txtMessage.Text = "<p><b>OK!你已经成功上传你的图片</b>";//提示上传成功
}
}
catch (Exception ex)
{
txtMessage.Text = ex.Message.ToString();
}
}
}
}


sql server数据库的表:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[uploaddb]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[uploaddb]
GO

CREATE TABLE [dbo].[uploaddb] (
[id] [decimal](18, 0) IDENTITY (1, 1) NOT NULL ,
[pic] [image] NULL ,
[FileLength] [bigint] NULL ,
[ContentType] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Description] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

ALTER TABLE [dbo].[uploaddb] ADD
CONSTRAINT [PK_uploaddb] PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
GO
执行生成表
wjwsnow 2005-06-17
  • 打赏
  • 举报
回复
不好意识 错了
现在问题是
我的页面视图enableViewState也为true
当StreamObject不关闭时执行一次
关闭之后该方法却触发两次?!
sql语句执行成功了但是表里却没有记录?!
帮帮忙 急用!!!
帮帮忙 急用!!!
wjwsnow 2005-06-17
  • 打赏
  • 举报
回复
谢谢大侠的指点:
现在还有问题
我的页面视图enableViewState也为true
当StreamObject不关闭时执行两次
关闭之后该方法却触发两次?!
sql语句执行成功了但是表里却没有记录?!
hchxxzx 2005-06-17
  • 打赏
  • 举报
回复
为什么我插入的是空的且方法执行两次
--------
1.执行两次是因为你的页面视图被你置为false不保存,导致两次保存.你可修改你的 enableViewState="False"为 enableViewState="True"
2.插入为空是因为你的StreamObject.Close();过早关闭.你可先不关闭它.

62,074

社区成员

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

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

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

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