使用ASP.NET更新Oracle 10g的语法

时间:2010-07-06 19:47:31

标签: asp.net .net sql oracle

我有一个带有更新按钮的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"

2 个答案:

答案 0 :(得分:1)

Oracle通常有:而不是@

WHERE OBJECTID = :OBJECTID

或许objectid是一个保留字,你可以在Oracle中使用"转义:

WHERE "OBJECTID" = :OBJECTID

或许你必须为ASP.NET指定一个参数:

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

答案 1 :(得分: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

具有相同的效果。