代码如下<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="administrator.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm2</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="fileUpload" method="post" encType="multipart/form-data" runat="server">
<FONT face="宋体"><input id="FileName" type="file" name="File1test" runat="server">
<asp:button id="Button1" style="Z-INDEX: 101; LEFT: 192px; POSITION: absolute; TOP: 80px" runat="server"
Text="Button"></asp:button></FONT></form>
</body>
</HTML>using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.IO;
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.Data.OleDb;
namespace administrator
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.HtmlControls.HtmlInputFile FileName;
OleDbConnection conn=new OleDbConnection(oledb.ConnectionString.ToString());
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 Button2_Click(object sender, System.EventArgs e)
{
DataSet ds=new DataSet();
OleDbDataAdapter da=new OleDbDataAdapter("SELECT NVL(MAX(OBJECTID),0) FROM UPLOADFILE",conn);
da.Fill(ds,"OBJECTID");
Response.Write(ds.Tables[0].Rows[0]["NVL(MAX(OBJECTID),0)"].ToString());
} private void Button1_Click(object sender, System.EventArgs e)
{
FileInfo file = new FileInfo(FileName.Value);
Stream fileStr = FileName.PostedFile.InputStream; //文件大小 int l = FileName.PostedFile.ContentLength; string type = FileName.PostedFile.ContentType; byte[] filedata = new byte[l]; int n = fileStr.Read(filedata,0,l); //SqlConnection对象

OleDbConnection conn = new OleDbConnection(administrator.oledb.ConnectionString.ToString());
DataSet ds=new DataSet();
OleDbDataAdapter da=new OleDbDataAdapter("SELECT NVL(MAX(OBJECTID),0) FROM UPLOADFILE",conn);
da.Fill(ds,"OBJECTID");

OleDbCommand cmd = conn.CreateCommand(); cmd.CommandText = "INSERT INTO UPLOADFILE(OBJECTID,FILETYPE,FILENAME,FILEBODY) VALUES(" + ds.Tables[0].Rows[0]["NVL(MAX(OBJECTID),0)"]+1 + ",@type,@name,@file)"; //参数FileData cmd.Parameters.Add("@file",OleDbType.Binary); cmd.Parameters["@file"].Value = filedata;    cmd.Parameters["@file"].Direction = ParameterDirection.Input; //参数FileType cmd.Parameters.Add("@type",OleDbType.VarChar,50,"FILETYPE"); cmd.Parameters["@type"].Value = type; cmd.Parameters["@type"].Direction = ParameterDirection.Input; //参数FileName cmd.Parameters.Add("@name",OleDbType.VarChar,20); cmd.Parameters["@name"].Value = getFileName(FileName.Value); cmd.Parameters["@name"].Direction = ParameterDirection.Input; conn.Open(); cmd.ExecuteNonQuery();
conn.Close();
}
private string getFileName(string pathname) {
if(pathname=="") return "";
int l = 0;
int j;
int i = pathname.Length; while(true) { j = pathname.IndexOf("\\",l); if(j>l)
l=j+1;
else
break; } string str = pathname.Remove(0,l);
return str; }
}
}
是通过别人上传SQL的代码改的,报错如下ORA-00936: 缺少表达式 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: ORA-00936: 缺少表达式源错误: 
行 111: conn.Open();
行 112:
行 113: cmd.ExecuteNonQuery();
行 114: conn.Close();
行 115: }
 请大家看看

解决方案 »

  1.   

    问题可能在这里://参数FileData
    cmd.Parameters.Add("@file",OleDbType.Binary);
    cmd.Parameters["@file"].Value = filedata;   
    cmd.Parameters["@file"].Direction = ParameterDirection.Input;如果你的 Oracle 是 9.0 以上 但在 9.1.4 版本以下的,插入 BLOB 字段会有这个问题,据说是某人的 BUG.把 Oracle 的版本升级到 9.2.0 就没有问题了。
      

  2.   

    是这样的问题吗,不可能吧,用access试一下
      

  3.   

    如果使用 ole db 不要用ms的那个 不行
    用oracel 提供 的那个好使的。或者用 Oracle.net 直接方式的对象。
      

  4.   

    我用 OracleClient 在 9.0 和 9.1.4 上都做过,也是失败的。
      

  5.   

    我换成access都成功了,可是一个字段都插不到oracle里面去。
      

  6.   

    楼主,试试高版本的 oracle .
      

  7.   

    cmd.Parameters.Add("@file",OleDbType.Binary); cmd.Parameters["@file"].Value = filedata;    cmd.Parameters["@file"].Direction = ParameterDirection.Input; //参数FileType cmd.Parameters.Add("@type",OleDbType.VarChar,50,"FILETYPE"); cmd.Parameters["@type"].Value = type; cmd.Parameters["@type"].Direction = ParameterDirection.Input; //参数FileName cmd.Parameters.Add("@name",OleDbType.VarChar,20); cmd.Parameters["@name"].Value = getFileName(FileName.Value); cmd.Parameters["@name"].Direction = 
    以上这段代码是SQL 里面的代码在oracle里必须写相应的存储过程来完成
    给一个链接你去看看
    http://blog.csdn.net/gaofeng2000/archive/2004/08/27/86264.aspx
      

  8.   

    >> 以上这段代码是SQL 里面的代码在oracle里必须写相应的存储过程来完成
    给一个链接你去看看不需要存储过程一样可以插入 BLOB 字段的,我们项目都用 OracleParameter 的方式。