【问题标题】:Trying to insert value in oracle db but getting "illegal variable name/number" issue尝试在 oracle db 中插入值但出现“非法变量名称/编号”问题
【发布时间】:2018-05-07 07:43:27
【问题描述】:

我正在尝试从 asp .net 在 oracle 表中插入值,但在

处遇到“非法变量名称/编号”问题
cmd.ExecuteNonQuery();

虽然传递给 SaveFrmDetails 的数据如下所示。任何帮助将不胜感激。

user = {Product_Id: "1", Tdcno: "tw2", Revision: "0", Revision_Date: "23-Nov-2017", P_Group: "Chain Link",Prod_Desc: "descr",N_I_Prd_Std:"india" ,Appln:"appllll",Frm_Supp:"Frmm",Created_Date: "23-nov-2017",Created_By:"Mohan"}

类属性

public class User
{
    public decimal Product_Id { get; set; }
    public string Tdcno { get; set; }
    public decimal Revision { get; set; }
    public DateTime Revision_Date { get; set; }
    public string P_Group { get; set; }
    public string Prod_Desc { get; set; }
    public string N_I_Prd_Std { get; set; }
    public string Appln { get; set; }
    public string Frm_Supp { get; set; }
    public DateTime Created_Date { get; set; }
    public string Created_By { get; set; }
}

我通过 ajax 调用在用户对象中发送的日期部分是这样的

 var monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun","Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
                var date = new Date();
                var val = date.getDate() + "-" + monthNames[date.getMonth()] + "-" + date.getFullYear();
 $("#Revision_Date").text(val);

使用用户对象通过 ajax 在 SaveFrmDetails webmethod 中传递的值

user.Revision_Date = $("[id*=Revision_Date]").text();

c#代码

public static void SaveFrmDetails(User user)
    {
        string connectionString = ConfigurationManager.ConnectionStrings["conndbprodnew"].ConnectionString;
 using (OracleConnection con = new OracleConnection(connectionString))
        {
            using (OracleCommand cmd = new OracleCommand("INSERT INTO TDC_PRODUCT1(PRODUCT_ID,TDC_NO, REVISION,REVISION_DATE,P_GROUP,PROD_DESC,N_I_PRD_STD,APPLN,FRM_SUPP,CREATED_DATE,CREATED_BY) VALUES (:Product_Id,:Tdc_No,:Revision,:Revision_Date,:P_Group,:Prod_Desc,:N_I_Prd_Std,:Appln,:Frm_Supp,:Created_Date,:Created_By)"))
            {
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("Product_Id", user.Product_Id);
                cmd.Parameters.AddWithValue("Tdc_No", user.Tdcno);
                cmd.Parameters.AddWithValue("Revision", user.Revision);
                cmd.Parameters.AddWithValue("Revision_Date", user.Revision_Date);
                cmd.Parameters.AddWithValue("P_Group", user.P_Group);
                cmd.Parameters.AddWithValue("Prod_Desc", user.Prod_Desc);
                cmd.Parameters.AddWithValue("N_I_Prd_Std", user.N_I_Prd_Std);
                cmd.Parameters.AddWithValue("Appln", user.Appln);
                cmd.Parameters.AddWithValue("Frm_Supp", user.Frm_Supp);
                cmd.Parameters.AddWithValue("Created_Date", user.Created_By);
                cmd.Parameters.AddWithValue("Created_By", user.Created_By);

                cmd.Connection = con;
                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
            }
        }
    }

oracle 表设计

create table TDC_PRODUCT1
(
  PRODUCT_ID    NUMBER(10) not null,
  TDC_NO        VARCHAR2(10) not null,
  REVISION      NUMBER(10) not null,
  REVISION_DATE DATE,
  P_GROUP       VARCHAR2(100) not null,
  PROD_DESC     VARCHAR2(100) not null,
  N_I_PRD_STD   VARCHAR2(100) not null,
  APPLN         VARCHAR2(100) not null,
  FRM_SUPP      VARCHAR2(100) not null,
  CREATED_DATE  DATE,
  CREATED_BY    VARCHAR2(30) not null
)

【问题讨论】:

    标签: c# jquery asp.net oracle


    【解决方案1】:

    改变

    INSERT INTO TDC_PRODUCT1 VALUES(Product_Id,Tdc_No, Revision,Revision_Date,P_Group,Prod_Desc,N_I_Prd_Std,Appln,Frm_Supp,Created_Date,Created_By)
    

    INSERT INTO TDC_PRODUCT1 (Product_Id,Tdc_No, Revision,Revision_Date,P_Group,Prod_Desc,N_I_Prd_Std,Appln,Frm_Supp,Created_Date,Created_By)
    VALUES (:Product_Id,:Tdc_No,:Revision,:Revision_Date,:P_Group,:Prod_Desc,:N_I_Prd_Std,:Appln,:Frm_Supp,:Created_Date,:Created_By)
    

    您(可选)在 VALUES 关键字之前指定列名,但如果您使用绑定变量,则需要在这些变量前面加上冒号 : 以表明这一点。

    【讨论】:

    • 它工作正常,但我收到错误“在预期数字的地方发现了一个非数字字符”。我搜索这个问题我发现它与日期相关的问题和我用于的属性持有值我在我的问题中添加了该类的详细信息以及我在代码中如何使用的日期部分,我也添加了它。
    • @hari 不要在预期日期的地方传递字符串 - use DateTime 或其他类似的 answer
    • 我更改了用户类中 Revision_Date 和 Created_Date 属性的数据类型,并按照您在 SaveFrmDetails 方法中提到的值明智地插入查询中的值。现在 cmd.ExecuteNonQuery();方法也执行了,但没有存储数据。我尝试了很多,但没有得到任何想法
    • @hari 尝试通过 cmets 进行调试将非常困难 - 您最好使用您现在使用的 C# 代码发布一个新问题以及您遇到的问题的许多详细信息尽你所能,看看 C# 专家(我不是)是否可以帮助你。
    【解决方案2】:

    首先,您应该使用占位符。解析时

    INSERT INTO TDC_PRODUCT1 VALUES(Product_Id,Tdc_No, Revision,Revision_Date,P_Group,Prod_Desc,N_I_Prd_Std,Appln,Frm_Supp,Created_Date,Created_By)
    

    Oracle 找不到任何放置参数值的地方。请改用:Product_Id:Tdc_No 等。

    接下来,在没有列列表的情况下使用此类 INSERT 是不好的做法。这意味着每次向表中添加新列时,您的应用程序都会被破坏。

    【讨论】:

      猜你喜欢
      • 2014-11-01
      • 1970-01-01
      • 2020-06-30
      • 2015-08-14
      • 1970-01-01
      • 2019-04-05
      • 2013-01-06
      • 2011-10-05
      • 1970-01-01
      相关资源
      最近更新 更多