首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

请教做一个GridView的嵌套,为什么出错提示ORA-01036,变量名或数值无效

2012-01-23 
请问做一个GridView的嵌套,为什么出错提示ORA-01036,变量名或数值无效?执行起来就提示OracleException(0x8

请问做一个GridView的嵌套,为什么出错提示ORA-01036,变量名或数值无效?
执行起来就提示
OracleException   (0x80131938):   ORA-01036,变量名或数值无效。
请高手帮忙看一下,不胜感激。
本程序的功能是在执行grv1的时候,实现grv1的数据distinct,然后以一个id对应多个在grv2中ID相同的记录的形式显示.

id           |   name
-------------------------
              |   Micheal
                ------------------
001         |   Linc
                ------------------
              |   Bagwell
--------------------------
002         |   Fenando
--------------------------
          ......


以下是程序代码:

  protected   void   Page_Load(object   sender,   EventArgs   e)
  {
                      .......

      String   sqlcmd   =   "   SELECT   DISTINCT   id   FROM   emp ";
      using   (OracleConnection   cn   =   COMUtility.GetConnection())
      {
          using   (OracleDataAdapter   da   =   new   OracleDataAdapter(sqlcmd,   cn))
          {
              DataSet   ds   =   new   DataSet();
              da.Fill(ds,   "emp ");
              DataTable   dt   =   new   DataTable();
              dt   =   ds.Tables[ "emp "];
              grv1.DataSource   =   ds.Tables[ "emp "];
              grv1.DataBind();
          }
      }

                    .......
}

protected   void   grv1_RowDataBound(object   sender,   GridViewRowEventArgs   e)
  {
      if   (e.Row.RowType   ==   DataControlRowType.DataRow)
      {
          System.Data.DataRowView   drv   =   (DataRowView)e.Row.DataItem;
          String   id   drv.Row.ItemArray[0].ToString();
          SqlDataSource   sds   =   e.Row.FindControl( "SqlDataSource1 ")   as   SqlDataSource;  
          sds.SelectParameters[ "id "].DefaultValue   =   id;
      }
  }

aspx代码:

<asp:GridView   ID= "grv1 "   runat= "server "   AutoGenerateColumns= "False "   DataKeyNames= "id "   AllowPaging= "True "   AllowSorting= "True "   PageSize= "10 "   OnRowDataBound= "grv1_RowDataBound "   >
    <Columns>
        <asp:BoundField   DataField= "id "   HeaderText= "id "   />
        <asp:TemplateField   HeaderText= " "   />
        <ItemTemplate>


            <asp:GridView   ID= "grv2 "   DataSourceID   =   "SqlDataSource1 "   runat= "server "   AutoGenerateColumns= "False "   DataKeyNames= "name "   >
                <Columns>
                    <asp:BoundField   DataField= "name "   HeaderText= "name "   />
                </Columns>
            </asp:GridView>
        <asp:SqlDataSource   ID= "SqlDataSource1 "   runat= "server "  
            ConnectionString= " <%$   ConnectionStrings:ConnectionString   %> "
            ProviderName= " <%$   ConnectionStrings:ConnectionString.ProviderName   %> "  
            SelectCommand= "SELECT   *   FROM   emp   WHERE   [id]   =   @id ">
            <SelectParameters>
                <asp:Parameter   Name= "id "   type= "String "   />
            </SelectParameters>
        </asp:SqlDataSource>

[解决办法]
这个是数据库的错误而已

net编程时有时会遇到莫名其妙的ora-01036错误。具体原因一般分析如下:
1、如错误介绍一样,你传入的参数和你语句中参数的顺序不同,或者树木不一致。
2、名字过长,oracle要求列名 <32字符(起这么长名字的人也够变态的)
3、在声明中 new OracleParameter(PARM_NAME........) 其中PARM_NAME中不需要包含语句中的 ": "(补充一下,包含一般也不会有错误)
4、你小子没事干在数据类型后面多加了一个空格
[解决办法]
String id drv.Row.ItemArray[0].ToString();
==========================================
String id = drv.Row.ItemArray[0].ToString();

热点排行