【问题标题】:ORA-01460: unimplemented or unreasonable conversion requested-uploading filesORA-01460: 未实现或不合理的转换请求上传文件
【发布时间】:2018-08-23 22:29:50
【问题描述】:

以下是在party_images 表中上传文件的代码。

protected void upload_Click(object sender, EventArgs e)
{
    try
    {
        using (OracleConnection connection = new OracleConnection(conString))
        {
            connection.Open();
            string filename = Path.GetFileName(FileUpload1.FileName);
            string[] tokenize = filename.Split('.');
            FileUpload1.SaveAs(Server.MapPath("~/files/") + descBox.Text + "." + tokenize[1]);

            string sourceLoc = Server.MapPath("~/files/" + descBox.Text + "." + tokenize[1]);
            FileStream fs = new FileStream(sourceLoc, FileMode.Open, FileAccess.Read);
            byte[] ImageData = new byte[fs.Length];
            fs.Read(ImageData, 0, System.Convert.ToInt32(fs.Length));
            fs.Close();
            String block = " BEGIN " +
                           " INSERT INTO party_images(party_id, sr_no, descr, party_image) VALUES ('"+Session["userId"]+"',"+srNo.Text+",'"+descBox.Text+"."+tokenize[1]+"', :1); " +
                           " END; ";
            OracleCommand cmd = new OracleCommand();
            cmd.CommandText = block;
            cmd.Connection = connection;
            cmd.CommandType = CommandType.Text;
            OracleParameter param = cmd.Parameters.Add("blobtodb", OracleDbType.LongRaw);
            param.Direction = ParameterDirection.Input;
            param.Value = ImageData;
            cmd.ExecuteNonQuery();
            descBox.Text = "";
            srNo.Text = "";
        }
    }
    catch (Exception ex) {
            ClientScript.RegisterStartupScript(this.GetType(), "unSuccessMessage", "window.onload = function(){ alert('"+ex.Message+"')};", true);     
    }
    finally
    {
        populateGrid(loadFromDb());
    }
}

表格描述是,

PARTY_ID 是 VARCHAR2(10)

SR_NO 是 NUMBER

DESCR 是 VARCHAR2(50)

PARTY_IMAGE 是 LONG RAW()

此功能正在上传所有文件,即图像、.docx、.pdf、.sql,但是当我上传任何包含屏幕截图或图片的 .docx 时,会出现上面的错误。

我已经尝试了以下链接,

ORA-01460: unimplemented or unreasonable conversion requested

The requested format conversion is not supported.

ORA-01460: unimplemented or unreasonable conversion requested

但我没有任何解决办法。如何上传任何类型的文件而不会出现此错误?

【问题讨论】:

  • 首先要做的是停止这样构建 SQL。对所有内容都使用参数化 SQL。这可能是也可能不是所需要的,但这是您应该立即解决您目前遇到的 SQL 注入漏洞的事情。此外,我鼓励您使用 File.ReadAllBytes 加载数据 - 目前您假设单次调用 Read 将读取所有数据,这通常是危险的流的假设。
  • (你真的需要保存文件吗?你不能只使用FileUpload1中的数据而不将其保存为文件吗?)
  • 如果我不保存它,那么我将如何像我所做的那样以字节为单位读取它。因为我没有客户端的路径。 @JonSkeet
  • 您只需直接使用FileBytes 属性。
  • 请仔细阅读我之前的评论。提供一个minimal reproducible example 控制台应用程序以完全删除 ASP.NET 部分。根据 APC 的回答,尝试使用 BLOB 或 BFILE 而不是 LONG RAW。

标签: c# asp.net oracle


【解决方案1】:

为什么要使用 LONG RAW 来存储二进制对象?这是一种已被弃用超过二十年 的数据类型。

如果您将PARTY_IMAGE 定义为一个 BLOB(或者可能是 BFILE),您会发现它更容易使用。 Find out more.

【讨论】:

    猜你喜欢
    • 2020-06-28
    • 2012-06-17
    • 2015-10-14
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 2021-07-15
    • 2015-09-18
    相关资源
    最近更新 更多