主题:  搞了几天,实在找不出出错原因(asp.net vb.net)

truelove

职务:普通成员
等级:1
金币:0.0
发贴:128
#12005/4/21 9:53:57
这是一个实现在手机上给一个公司的每一人留言的程序,用asp.net 移动开发来制作的。
其中的很多语言同asp.net 是一样的。现在遇到insert 语句的语法错误,小弟实在找不到原因,烦请各位看看。


我将代码打包传上来,用visual studio.net 2003做的,用webmatrix 的网友不能打开,但可以用记事本直接查看。
 
Private Sub Command2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command2.Click

Dim get_username As String = TextBox1.Text.Trim()
Dim get_password As String = TextBox2.Text.Trim()
Dim get_guest_name As String = TextBox3.Text.Trim()
Dim get_sex As String = SelectionList2.Selection.value.ToString()
'上一句是用了asp.net 移动控件,语法没有错。
Dim get_age As Integer = System.Convert.ToInt32(TextBox4.Text.Trim())
Dim dsn As String = "provider=microsoft.jet.oledb.4.0;data source=" & Server.MapPath("db.mdb")
Dim conn As OleDbConnection = New OleDbConnection(dsn)
conn.Open()
Dim strsql As String = "insert into guest_info(username,password,guest_name,sex,age) values('" & get_username & "','" & get_password & "','" & get_guest_name & "','" & get_sex & "','" & System.Convert.ToInt32(get_age) & "')"
Dim cmd As OleDbCommand = New OleDbCommand(strsql, conn)
cmd.ExecuteNonQuery()
'就是提示这一句语法错误
conn.Close()
ActiveForm = add_user_info
'上一句是将add_user_info的这张卡片设为当前卡片,语句没有错误
End Sub

图片如下:

相关文件(rar):点这儿打开

编辑历史:[此帖最近一次被 truelove 编辑过(编辑时间:2005-04-21 16:53:26)]


缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
#22005/4/21 10:58:36
具体什么错误,对于分析很重要

如果确定是SQL语句的错误,那么先输出SQL看看有没有问题.也可以在企业管理器里面查询一下,那样错误信息会更详细一些.注意字段类型的问题



古剑刀

职务:普通成员
等级:1
金币:0.0
发贴:41
#32005/4/21 13:43:47
我不太明白asp.net,移动开发也没有经验,但是我觉得SQL语句方面应该是有问题,我提3点建议:
1、你对照移动开发的说明,检查一下引号对是否出现问题;
2、Dim strsql As String = "insert into guest_info(username,password,guest_name,sex,age) values('" & get_username & "','" & get_password & "','" & get_guest_name & "','" & get_sex & "','" & System.Convert.ToInt32(get_age) & "')"这句话里的System.Convert.ToInt32(get_age)直接用get_age不行吗?我看上面已经用过
System.Convert.ToInt32()函数了;
3、检查时不要只盯着这句话cmd.ExecuteNonQuery(),因为它只是执行一个SQL串而已,这样的情况以后经常会遇到。



truelove

职务:普通成员
等级:1
金币:0.0
发贴:128
#42005/4/21 16:45:40
非常感谢两位的答复,我已经尝试过不下几十次了。

古剑刀,您说得是对的,system.conver.toint32前面已经用过了,其实这里是不用加上的,我是在实在找不出原因的情况下才这样做的。

我也用response.write(strsql)打印出来了结果,都是正确的。
就是找不出原因,怪事了。

我以前一直用asp webtrix ,遇到这种问题肯定会很快解决,我现在开始用visual studio.net,估计我是在用这个时,有哪个操作出错了。。

我打开项目时,提示要我保存datagrid.sln这个文件,是不是这个的问题?



缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
#52005/4/21 17:01:17
说一下具体什么错误.同样来自SQL的错误,会有很多种可能.这样才好分析



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#62005/4/21 19:51:12
password是固定词,用[password]。上面提示执行SQL时的错误。


非常大鱼

缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
#72005/4/21 20:19:24
sex是数字型么,那么不应该加引号

还有,Dim strsql As String,既然是string,怎么会联接一个Int32的变量?这里的get_sex没有必要ToInt32



truelove

职务:普通成员
等级:1
金币:0.0
发贴:128
#82005/4/22 10:41:46
非常高手两位高手的指点,问题已经得到解决了。

缺缺兄,您看错了,sex是字段类型!

错误原因的确向蓝鲸说的那样,我将password改成pwd就可以了。

那这里还是向各位请教一下,password是access的保留字?还是asp.net的保留字



truelove

职务:普通成员
等级:1
金币:0.0
发贴:128
#92005/4/22 10:56:58
但为何我的select语句中,出现password为什么不会出错呢?

还望两位高手指点一番。



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#102005/4/22 17:19:35
password是access或sqlserver的保留字,sql有很多保留字如user,date等,尽量在取字段名时避免pwd是不是也会有问题?如果有疑问了,通常做法是加[]号,反正加上去是没副作用的。


非常大鱼

truelove

职务:普通成员
等级:1
金币:0.0
发贴:128
#112005/4/28 8:45:04
非常感谢蓝鲸兄的答复!