【问题标题】:Update Syntax for Oracle 10g using ASP.NET使用 ASP.NET 更新 Oracle 10g 的语法
【发布时间】:2011-03-12 12:06:37
【问题描述】:

我有一个带有更新按钮的 GridView。我想更新数据库中的一个字段,但我认为下面代码中的“@”导致我的 ASP .NET 页面出现问题。在网格或更新(UpdateCommand)语句中可以做什么?请注意,我收到 Ora 00936 错误。

<asp:SqlDataSource ID="dsBooks" runat="server"
            ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>"
            ConnectionString="<%$ ConnectionStrings:ConnectionString %>"         
            SelectCommand="SELECT OBJECTID, TRACT, GIS_ACRES, COMMENTS, PDF_STORAGE FROM CampusDev.CU_POLY ORDER BY OBJECTID"
            UpdateCommand="UPDATE CampusDev.CU_POLY SET COMMENTS='just atest' WHERE OBJECTID=@OBJECTID"

【问题讨论】:

    标签: asp.net .net sql oracle


    【解决方案1】:

    Oracle 用语中的“:OBJECTID”是一个绑定变量。

    我对 asp.net 语义一无所知,但你会想在这里使用绑定变量。 This link应该提供更完整的解释,但基本上是这样的:

    cmd.Parameters.Add(new OracleParameter(“OBJECTID″, @OBJECTID));
    UpdateCommand="UPDATE CampusDev.CU_POLY 
           SET COMMENTS='just atest' WHERE OBJECTID=:OBJECTID"
    

    然后执行你的命令。

    在生产代码中尽可能使用绑定变量 - 它允许 Oracle 避免对 SQL 语句进行硬解析。

    此外,绑定变量的名称对 Oracle 来说并不重要。它出现的顺序是重要的方面。你可以简单地说

    WHERE OBJECTID=:1
    

    同样的效果。

    【讨论】:

    • DCookie:您的解决方案看起来很有希望。虽然我现在已经转向使用代码隐藏的方式来编写这个页面,但我仍然会尝试你的解决方案来学习新的东西——它可能有一天会派上用场。谢谢!
    • DCookie 解决方案的略微修改版本在文件后面的代码中工作: cmd.CommandText = "UPDATE CampusDev.CU_POLY SET COMMENTS = :COMMENTS WHERE OBJECTID = " + Request.QueryString["OBJECTID"]; cmd.Parameters.Add(":COMMENTS", TextBox1.Text);非常感谢大家!
    【解决方案2】:

    Oracle 通常有: 而不是@

    WHERE OBJECTID = :OBJECTID
    

    或者也许 objectid 是一个保留字,您可以在 Oracle 中使用 " 对其进行转义:

    WHERE "OBJECTID" = :OBJECTID
    

    或者您可能必须为 ASP.NET 指定一个参数:

     <asp:SqlDataSource ...>
         <UpdateParameters>
             <asp:Parameter Type="Int32" Name="ObjectId" />
         </UpdateParameters>
     </asp:SqlDataSource>
    

    【讨论】:

    • 哇!你们真快!我刚刚尝试了您的方法,但现在得到:ORA-01036:非法变量名称/编号新代码:UpdateCommand="UPDATE CampusDev.CU_POLY SET COMMENTS='TEST COMMENT' WHERE 'OBJECTID'=:OBJECTID"
    • @meengla: 'OBJECTID' 是一个纯字符串,你需要"OBJECTID" (双引号)来引用数据库字段。
    • 是的,它现在可能不喜欢 :OBJECTID... 你有机会重命名那个吗?
    • 我认为我无法重命名该 ObjectID。但是......让我试试你关于“指定参数”的建议。我知道,如果需要,我也可以使用 Code Behind 文件来执行此操作。感谢您的帮助!
    • 不,“指定参数”方法给出错误:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 2010-12-17
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多