真是不知道那有错误
真是不知道那有错误,却提示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>
问题点数:20、回复次数:25Top
1 楼LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^)回复于 2005-04-01 20:40:57 得分 5
SELECT * FROM [counter]
再试试看Top
2 楼hackate(兰花开香入梦境,独思佳人亦飘然!!)回复于 2005-04-01 20:45:14 得分 5
dr.Read();
int i=-1;
i=(int)dr["cou"];
dr.Close();
if(Session["flag"]==null)
{
i++;
Session["flag"]="true";
}
请使用while(rs.read();)
循环,因为你是循环取值。Top
3 楼mfgok(想了又想学吧)回复于 2005-04-01 20:56:29 得分 0
这是个计数器只有一个值Top
4 楼mfgok(想了又想学吧)回复于 2005-04-01 21:00:20 得分 0
我改了SELECT * FROM [counter]
又提示Line 13: i=(int)dr["cou"];句柄无效,原来这个没错的Top
5 楼valu(V6bbs Ver1.4发布(仿西祠xici):www.v6bbs.com)回复于 2005-04-01 21:05:12 得分 0
i=Convert.ToInt32(dr["cou"]);Top
6 楼mfgok(想了又想学吧)回复于 2005-04-01 21:10:38 得分 0
i=Convert.ToInt32(dr["cou"]);
还是Exception Details: System.Data.OleDb.OleDbException: 行句柄无效。
表中cou字段是设成长整形Top
7 楼tophifi(黑字先生)回复于 2005-04-01 21:22:02 得分 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();
Top
8 楼tophifi(黑字先生)回复于 2005-04-01 21:27:59 得分 0
改急了,错了点
应该是
i = com1.ExecuteScalar().ToString();
Top
9 楼mfgok(想了又想学吧)回复于 2005-04-01 21:44:54 得分 0
这样i++能行吗Top
10 楼zhangaipl(烟酒僧)回复于 2005-04-01 21:57:17 得分 0
message.Text="您是第"+i+"访客";
OleDbCommand com2=new OleDbCommand("UPDATE counter SET cou=" & i,conn);
com2.ExecuteNonQuery();
conn.Close();
}
Top
11 楼mfgok(想了又想学吧)回复于 2005-04-01 22:04:10 得分 0
i=(int)dr["cou"];句柄无效
这行怎么改Top
12 楼mfgok(想了又想学吧)回复于 2005-04-02 19:44:51 得分 0
我又这样改了
<%@ 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();句柄无效
肯定是在那隐藏着重大错误,请高手看看
Top
13 楼nilnshen(光光)回复于 2005-04-02 19:52:17 得分 5
ExecuteReader returns multiple result collections, so dr["cou"].ToString() will not be sure which specified value you wanted to get.
Top
14 楼mfgok(想了又想学吧)回复于 2005-04-02 20:03:26 得分 0
楼上能说的明白点吗。我英文不好
这是个计数器只有一个字段一条记录。
还必须用循环语句吗Top
15 楼nilnshen(光光)回复于 2005-04-02 20:15:48 得分 0
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()+"访客";Top
16 楼tophifi(黑字先生)回复于 2005-04-02 20:31:25 得分 0
不是说了连OleDbDataReader都不需要嘛,就1列1行一个值要OleDbDataReader干吗啊,直接赋值给变量不就行了Top
17 楼tophifi(黑字先生)回复于 2005-04-02 20:36:56 得分 0
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(); Top
18 楼nilnshen(光光)回复于 2005-04-02 20:54:01 得分 0
"UPDATE counter SET cou = " + i;
if cou is defined as char type, just do some type convertion work here on int i.Top
19 楼PeakChen(一点点)回复于 2005-04-02 20:54:03 得分 0
靠,这样都有错,太离谱了吧!
有没有这个字段啊。。。。。。。。。?Top
20 楼tophifi(黑字先生)回复于 2005-04-02 21:50:23 得分 0
还不行的话,怀疑你数据库连接是不是成功了,数据库路径不需要\\吧,再说用Server.MapPath不是更好Top
21 楼coldpanth(^War3^)回复于 2005-04-02 23:23:30 得分 0
你确定你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();
Top
22 楼mfgok(想了又想学吧)回复于 2005-04-03 19:32:00 得分 0
今晚还来解决这个问题
按楼上两位的做了,真的没有读出数据
用Server.MapPath也没有读出数据,db1设为存档属性
这怎么办Top
23 楼vrace(Warcraft III in 1.20)回复于 2005-04-03 21:07:34 得分 0
你的 OleDbDataReader 以前是不是没有 Close 啊?Top
24 楼mfgok(想了又想学吧)回复于 2005-04-03 21:20:19 得分 0
就这样一个文件,以前也没有OPENTop
25 楼Dergen(白云兮悠悠)回复于 2005-04-03 21:24:15 得分 0
counter 表是否有数据?Top




