【问题标题】:ORA-01722: invalid number #2ORA-01722: 无效编号 #2
【发布时间】:2014-04-14 05:42:55
【问题描述】:

我之前遇到的错误是我无法将 NULL 值插入到 resources_id 中,所以我将 resources_id 添加到插入值中以避免这个问题,但是当我这样做时,我得到了这个错误:

ORA-01722: 无效的数字 C#

第 56 行:cmd.ExecuteNonQuery();

我之前为避免这个问题所做的就是删除了not Null 并将我的表中的所有内容都保留为空,它可以工作,但它给我带来了其他我发现很难解决的问题,所以我决定回到主要问题并将NOT NULL 添加到我数据库中的resources_id 中。 请帮忙解决这个问题。

我遇到的另一个问题是参数中的 resources_id 无法识别

我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.OracleClient;
using System.Configuration;
using System.IO;



public partial class Lecturer_upload_resources : System.Web.UI.Page
{
    string strCon = "Data Source=****;Persist Security Info=True;User ID=****;Password=****;Unicode=false";
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindGridviewData();
        }
    }
    // Bind Gridview Data
    private void BindGridviewData()
    {
        using (OracleConnection con = new OracleConnection(strCon))
        {
            using (OracleCommand cmd = new OracleCommand())
            {
                cmd.CommandText = "select * from resource1";
                cmd.Connection = con;
                con.Open();
                gvDetails.DataSource = cmd.ExecuteReader();
                gvDetails.DataBind();
                con.Close();
            }
        }
    }
    // Save files to Folder and files path in database
    protected void btnUpload_Click(object sender, EventArgs e)
    {
          string filename = Path.GetFileName(fileUpload1.PostedFile.FileName);
        Stream str = fileUpload1.PostedFile.InputStream;
        BinaryReader br = new BinaryReader(str);
        Byte[] size = br.ReadBytes((int)str.Length);
        using (OracleConnection con = new OracleConnection(strCon))
        {
            using (OracleCommand cmd = new OracleCommand())
            {
                cmd.CommandText = "insert into resource1(Resources_id,FileName,fileType,Filedata) values(:Resources_id,:FileName,:FileType,:FileData)";
                cmd.Parameters.AddWithValue(":Resources_id",Resources_id);
                cmd.Parameters.AddWithValue(":FileName", filename);
                cmd.Parameters.AddWithValue(":FileType", "application/word");
                cmd.Parameters.AddWithValue(":FileData", size);
                cmd.Connection = con;
                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
                BindGridviewData();
            }
        }
    }

【问题讨论】:

  • 我没有看到你在任何地方声明或分配任何值给Resources_id
  • 正如我所说,我添加了 resources_id 来解决我之前遇到的问题,所以我不知道要添加什么才能让我的代码正常工作。我只是添加到参数中,如您在我的代码
  • 其他参数被声明并赋值(如name),你需要对Resources_id做同样的事情。你必须决定应该为它插入什么值以及什么类型是合适的..
  • 感谢重播。当我尝试将其定义为字符串 Resources_id = FileUpload1.PostedFile.Resources_id;我收到 PostedFile 的错误无法识别
  • 也许您想要在服务器端自动增加Resources_id 字段?如果是这样,您可以在该列上设置 AUTO_INCREMENT 属性并将其全部放在插入之外。

标签: c# oracle visual-studio-2012


【解决方案1】:

尝试使用这个

cmd.BindByName = true;

在插入块中 或者尝试删除":"

【讨论】:

  • 我做了,但我的代码中无法识别 bindbyname。我必须使用“:”,因为我使用的是 Oracle 数据库。
  • 你代码中的FileData是真实数据还是数据大小?它的数据库类型是什么?
  • 我正在使用 Oracleclient,而对于数据,我正在使用 BLOB。但真实数据或数据大小我很抱歉我不明白你的意思。
  • 好的,那么您应该在代码中声明您的 resource_id 或在您的数据库中将其设为 AUTO_INCREMENT。其次是:)
猜你喜欢
  • 1970-01-01
  • 2019-08-09
  • 2023-03-15
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
相关资源
最近更新 更多