C# ORA-01460:未实现或不合理的转换请求上载文件

C# ORA-01460:未实现或不合理的转换请求上载文件,c#,asp.net,oracle,C#,Asp.net,Oracle,以下是在party_images表中上载文件的代码 protected void upload_Click(object sender, EventArgs e) { try { using (OracleConnection connection = new OracleConnection(conString)) { connection.Open(); string filename = Pat

以下是在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());
    }
}
表说明如下:

第二方ID为VARCHAR2(10)

SR_NO是一个数字

描述为VARCHAR2(50)

PARTY_图像为长原始()

此函数用于上载所有文件,如图像、.docx、.pdf、.sql,但当我上载任何包含屏幕截图或图片的.docx时,会出现上面的错误

我尝试了以下链接


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

为什么要使用LONG RAW存储二进制对象?这是一种被弃用了20多年的数据类型


如果您将
PARTY\u IMAGE
定义为一个BLOB(或者可能是BFILE),您会发现使用它要容易得多

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