真是不知道那有错误,却提示System.Data.OleDb.OleDbException: FROM 子句语法错误。
<%@ Page Language="C#" Debug="true" %>
<%@Import NameSpace="System.Data"%>
<%@Import NameSpace="System.Data.OleDb"%>
<script language="c#" runat="server">
void Page_Load(Object sender,EventArgs e)
{
 OleDbConnection conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\web\\db1.mdb");
 OleDbCommand com1=new  OleDbCommand("SELECT * FROM counter",conn);
 conn.Open();
 OleDbDataReader dr=com1.ExecuteReader();
 dr.Read();
 int i=-1;
 i=(int)dr["cou"];
 dr.Close();
 if(Session["flag"]==null)
 {
  i++;
 Session["flag"]="true";
 }
 message.Text="您是第"+i+"访客";
 
OleDbCommand com2=new  OleDbCommand("UPDATE counter SET cou=i",conn);
com2.ExecuteNonQuery();
conn.Close();
}
</script>
<htlm>
<body>
<asp:Label id="message" runat="server"/>
</body>
</htlm>

解决方案 »

  1.   

    SELECT * FROM [counter]
    再试试看
      

  2.   

    dr.Read();
     int i=-1;
     i=(int)dr["cou"];
     dr.Close();
     if(Session["flag"]==null)
     {
      i++;
     Session["flag"]="true";
     }请使用while(rs.read();)循环,因为你是循环取值。
      

  3.   

    我改了SELECT * FROM [counter]
    又提示Line 13:  i=(int)dr["cou"];句柄无效,原来这个没错的
      

  4.   

    i=Convert.ToInt32(dr["cou"]);
    还是Exception Details: System.Data.OleDb.OleDbException: 行句柄无效。
    表中cou字段是设成长整形
      

  5.   

    只有一个值的话不需要用OleDbDataReader   OleDbConnection conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\web\\db1.mdb");
       OleDbCommand com1=new  OleDbCommand("SELECT * FROM counter",conn);
       conn.Open();   string i;   i = objCmd.ExecuteScalar().ToString();if(Session["flag"]==null)
     {
      i++;
     Session["flag"]="true";
     }
     message.Text="您是第"+i+"访客";
     
    com1.CommaneText = "UPDATE counter SET cou="+ i;
    com1.ExecuteNonQuery();
    com1.Dispose();
    conn.Close();
      

  6.   

    改急了,错了点应该是
    i = com1.ExecuteScalar().ToString();
      

  7.   

    message.Text="您是第"+i+"访客";
     
    OleDbCommand com2=new  OleDbCommand("UPDATE counter SET cou=" & i,conn);
    com2.ExecuteNonQuery();
    conn.Close();
    }
      

  8.   

    i=(int)dr["cou"];句柄无效
    这行怎么改
      

  9.   

    我又这样改了
    <%@ Page Language="C#" Debug="true" %>
    <%@Import NameSpace="System.Data"%>
    <%@Import NameSpace="System.Data.OleDb"%>
    <script language="c#" runat="server">
    void Page_Load(Object sender,EventArgs e)
    {
     OleDbConnection conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\web\\db1.mdb");
     OleDbCommand com1=new  OleDbCommand("SELECT * FROM [counter]",conn);
     conn.Open();
     OleDbDataReader dr=com1.ExecuteReader();
     dr.Read();
     string str;
     str=dr["cou"].ToString();
     int i=int.Parse(str);
     dr.Close();
     if(Session["flag"]==null)
     {
     
      i++;
     Session["flag"]="true";
     }
     message.Text="您是第"+i+"访客";
     
    OleDbCommand com2=new  OleDbCommand("UPDATE counter SET cou"+i,conn);
    com2.ExecuteNonQuery();
    conn.Close();
    }
    </script>
    <htlm>
    <body>
    <asp:Label id="message" runat="server"/>
    </body>
    </htlm>
    依然提示str=dr["cou"].ToString();句柄无效
    肯定是在那隐藏着重大错误,请高手看看
      

  10.   

    ExecuteReader returns multiple result collections, so dr["cou"].ToString() will not be sure which specified value you wanted to get.
      

  11.   

    Try this:
    1)
     /*  OleDbDataReader dr=com1.ExecuteReader();
         dr.Read();
         string str;
         str=dr["cou"].ToString();
         int i=int.Parse(str);   */
    ------->int i= Convert.ToInt16(com1.ExecuteScalar());2)
    message.Text="您是第"+i+"访客";   --->  message.Text = "您是第"+i.ToString()+"访客";
      

  12.   

    不是说了连OleDbDataReader都不需要嘛,就1列1行一个值要OleDbDataReader干吗啊,直接赋值给变量不就行了
      

  13.   

    OleDbConnection conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\web\\db1.mdb");
       OleDbCommand com1=new  OleDbCommand("SELECT * FROM counter",conn);
       conn.Open();   int i;   i = (int) com1.ExecuteScalar().ToString();if(Session["flag"]==null)
     {
      i = i++;
     Session["flag"]="true";
     }
     message.Text="您是第"+ i.Tostring() +"访客";
     
    com1.CommaneText = "UPDATE counter SET cou = "+ i;
    com1.ExecuteNonQuery();
    com1.Dispose();
    conn.Close();
      

  14.   

    "UPDATE counter SET cou = " + i;
    if cou is defined as char type, just do some type convertion work here on int i.
      

  15.   

    还不行的话,怀疑你数据库连接是不是成功了,数据库路径不需要\\吧,再说用Server.MapPath不是更好
      

  16.   

    你确定你DataReader读出数据了吗?OleDbDataReader dr=com1.ExecuteReader();
     if (dr.HasRows)       //看看你这个dr里有没有数据,我估计是没有
     {
           Response.Write("有"); 
     }
     else
     {
           Response.Write("没有"); 
     }  //dr.Read();
      //string str;
     //str=dr["cou"].ToString();
     //int i=int.Parse(str);
     //dr.Close();
      

  17.   

    今晚还来解决这个问题
    按楼上两位的做了,真的没有读出数据
    用Server.MapPath也没有读出数据,db1设为存档属性
    这怎么办
      

  18.   

    你的 OleDbDataReader 以前是不是没有 Close 啊?
      

  19.   

    就这样一个文件,以前也没有OPEN