2013-04-06 54 views
0

System.Data.OleDb.OleDbException:处理命令期间发生一个或多个错误。 ORA-00936:缺少表达显示图像 - BLOB类型 - Gridview中的Oracle 11g Apex

这是我的错误。有什么建议么?

我ashx的处理程序代码是:

 public class Handler1 : IHttpHandler 
{ 

    public void ProcessRequest(HttpContext context) 
    { 
     OracleConnection conn = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVER_NAME=XE)));User Id=sakthi_studdb;Password=sakthi;"); 
     OracleCommand cmd = new OracleCommand(); 
     cmd.CommandText = "Select IMG_NAME, IMG_IMAGE from MYIMGTABLE where IMG_ID =:IMG_ID"; 
     cmd.CommandType = System.Data.CommandType.Text; 
     cmd.Connection = conn; 

     OracleParameter ImageID = new OracleParameter(":IMG_ID",OracleDbType.Int32); 
     ImageID.Value = context.Request.QueryString["IMG_ID"]; 
     cmd.Parameters.Add(ImageID); 
     conn.Open(); 
     OracleDataReader dReader = cmd.ExecuteReader(); 
     dReader.Read(); 
     context.Response.BinaryWrite((byte[])dReader["IMG_IMAGE"]); 
     dReader.Close(); 
     conn.Close(); 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 

我的aspx代码:

<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns="False" DataKeyNames="IMG_ID"> 
    <Columns> 
    <asp:BoundField DataField="IMG_ID" HeaderText="IMG_ID" InsertVisible="False" ReadOnly="True" SortExpression="IMG_ID" /> 
    <asp:BoundField DataField="IMG_NAME" HeaderText="IMG_NAME" SortExpression="IMG_NAME" /> 
    <asp:TemplateField HeaderText="IMG_IMAGE"> 
    <ItemTemplate> 
    <asp:Image ID="Image1" runat="server" ImageUrl='<%# "Handler1.ashx?IMG_ID=" + Eval("IMG_ID")%>'/> 
    </ItemTemplate> 
    </asp:TemplateField> 
    </Columns> 
    </asp:GridView> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:ConnectionString2 %>" 
     ProviderName="<%$ ConnectionStrings:ConnectionString2.ProviderName %>" 
     SelectCommand="SELECT [IMG_ID],[IMG_NAME],[IMG_IMAGE] FROM [MYIMGTABLE]"> 
    </asp:SqlDataSource> 

enter image description here 这是完成我的项目的最后拼图...帮助!

+0

我认为你需要重新命名的参数:IMG_ID的东西,不包含冒号,恩。 P_IMG_ID。 – 2013-04-06 17:45:34

+0

结肠很好;它将下面的名称指定为参数。也许有关于数据类型的混淆?尝试'ImageID.Value = Convert.ToInt32(context.Request.QueryString [“IMG_ID”])'看看是否有帮助。另请注意,一旦查询正常运行,您可能会遇到读BLOB值的麻烦。如果你这样做,例如Google'ado.net oracle blob'。 – 2013-04-06 18:47:30

+0

你需要一个=和你的参数值之间的空格吗? – 2013-04-07 03:44:31

回答

0

ORA-00936,ORA-936是表示你刚才执行的SQL语句缺少表达一般性错误。大多数情况下,这个错误表明你错过了,[逗号]或者from子句或者where子句或刚解析过的SQL的其他部分。