急急急急啦...插入数据中代码cmd.ExecuteNonQuery()出错,怎么解决?
我是在VB.net下写的代码,想实现插入数据功能。但是运行到这里cmd.ExecuteNonQuery()就出错.代码:
Dim connstr, insertcmd As String
connstr = "Provider= Microsoft.Jet.OLEDB.4.0;Data Source=homework.mdb"
insertcmd = "Insertinto Enternumber(username,password,易做图,work,tel,mail) values (@用户名,@密码,@性别,@职业,@电话,@邮箱)"
Dim conn As OleDbConnection, cmd As OleDbCommand
conn = New OleDbConnection(connstr)
conn.Open()
cmd = New OleDbCommand(insertcmd, conn)
cmd.Parameters.Add(New OleDbParameter("@用户名", OleDbType.VarChar))
cmd.Parameters.Add(New OleDbParameter("@密码", OleDbType.VarChar))
cmd.Parameters.Add(New OleDbParameter("@性别", OleDbType.VarChar))
cmd.Parameters.Add(New OleDbParameter("@职业", OleDbType.VarChar))
cmd.Parameters.Add(New OleDbParameter("@电话", OleDbType.VarChar))
cmd.Parameters.Add(New OleDbParameter("@邮箱", OleDbType.VarChar))
cmd.Parameters("@用户名").Value = Val(txtName.Text)
cmd.Parameters("@密码").Value = Val(txtpassword.Text)
cmd.Parameters("@性别").Value = Val(txt易做图.Text)
cmd.Parameters("@职业").Value = Val(txtwork.Text)
cmd.Parameters("@电话").Value = Val(txtTel.Text)
cmd.Parameters("@邮箱").Value = Val(txtmail.Text)
cmd.ExecuteNonQuery()
conn.Close()
message = "恭喜你,注册成功!赶快去登陆吧!"
MessageBox.Show(message, "", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1) --------------------编程问答-------------------- "Insertinto Enternumber(username,password,易做图,work,tel,mail) values (@用户名,@密码,@性别,@职业,@电话,@邮箱)"
好像 Insertinto 中间少空格吧 --------------------编程问答-------------------- 不是cmd.ExecuteNonQuery() 出错,是你的SQL语句错了,建议把指令输出到TextBox,然后复制到SQL的查询分析器中运行通过了在编译执行。
--------------------编程问答-------------------- insert into哪个我改过来了.还是出错.
--------------------编程问答-------------------- 我用的是具名参数的插入.你刚才说的SQL的查询分析器是什么意思? --------------------编程问答-------------------- 是樓主cmd的下面屬性沒有設:
cmd.CommandType = CommandType.StoredProcedure
因為樓主用到了存諸過程。 --------------------编程问答-------------------- cmd.CommandType = CommandType.StoredProcedure
是什么意思?
我的出错地方是那里?都运行不了. --------------------编程问答-------------------- 把這句代易做图加cmd.ExecuteNonQuery() 他的前面就行。 --------------------编程问答-------------------- 晕...把你的那句代码:cmd.CommandType = CommandType.StoredProcedure
加了后,运行后,
报错cmd.CommandType = CommandType.StoredProcedure
崩溃了...
--------------------编程问答-------------------- cmd.CommandType = CommandType.TableDirect
換這句暱?呵呵。。總有辦法解決的,別崩潰。 --------------------编程问答-------------------- password 是系统关键字吧改为[password]试试 --------------------编程问答-------------------- 不好意思.我把机子重起了一下,结果运行后,你的那句代码没有出错。但是还是报错了。还是原来的错误。
希望能得到解决.
谢谢各位. --------------------编程问答-------------------- 悄悄问下,报的什么错
贴出来看看先 --------------------编程问答-------------------- 我的数据表里有id_no ,username,password,易做图,work ,tel,mail
关键字是:id_no.这个有关系吗? --------------------编程问答-------------------- 当然有,如果不是自增长
你得赋值 --------------------编程问答-------------------- 它运行后显示:未处理的“System.Data.OleDb.OleDbException”类型的异常出现在 system.data.dll 中。
jinhui033
jinhui033
等 级:
发表于:2007-12-21 13:53:497楼 得分:0
有关调用实时(JIT)调试而不是此对话框的详细信息,
请参阅此消息的结尾。
************** 异常文本 **************
System.Data.OleDb.OleDbException: INSERT INTO 语句的语法错误。
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
at 我的大作业.zhuce.btnOK_Click(Object sender, EventArgs e) in E:\我的VB作业试验报告。\我的大作业\zhuce.vb:line 360
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** 已加载的程序集 **************
mscorlib
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.2407
基本代码: file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
我的大作业
程序集版本: 1.0.2911.19957
Win32 版本: 1.0.2911.19957
基本代码: file:///E:/我的VB作业试验报告。/我的大作业/bin/我的大作业.exe
----------------------------------------
System.Windows.Forms
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.2032
基本代码: file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.2407
基本代码: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
System.Drawing
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.2032
基本代码: file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
System.Xml
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.2032
基本代码: file:///c:/windows/assembly/gac/system.xml/1.0.5000.0__b77a5c561934e089/system.xml.dll
----------------------------------------
Microsoft.VisualBasic
程序集版本: 7.0.5000.0
Win32 版本: 7.10.6001.4
基本代码: file:///c:/windows/assembly/gac/microsoft.visualbasic/7.0.5000.0__b03f5f7f11d50a3a/microsoft.visualbasic.dll
----------------------------------------
System.Data
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.2032
基本代码: file:///c:/windows/assembly/gac/system.data/1.0.5000.0__b77a5c561934e089/system.data.dll
这个是在窗体中运行中出现的错误提示:insert into 语法错误:
----------------------------------------
System.Windows.Forms.resources
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代码: file:///c:/windows/assembly/gac/system.windows.forms.resources/1.0.5000.0_zh-chs_b77a5c561934e089/system.windows.forms.resources.dll
----------------------------------------
************** JIT 调试 **************
计算机的配置文件(machine.config)的
system.windows.forms 节中必须设置 jitDebugging 值。
编译应用程序时还必须启用\r\n调试。\r\n\r\n例如: \r\n\r\n <configuration> \r\n <system.windows.forms jitDebugging="true" /> \r\n </configuration> \r\n\r\n启用 JIT 调试后,任何未处理的异常\r\n都将被发送到此计算机上注册的 JIT 调试器,\r\n而不是由此对话框处理。\r\n
--------------------编程问答-------------------- 1.id_no设为自增长
2.每次添加数据时id_no设为数据库中id_no的最大值+1 --------------------编程问答-------------------- 大哥啊....
cmd.CommandType = CommandType.TableDirect
換這句暱?呵呵。。總有辦法解決的,別崩潰。
换了这句后,还是出现原来的错误。..
我更崩溃了.... --------------------编程问答-------------------- o ...数据表里的id_no 是自动编号的.可是你看看我的代码里,我并没有给id_no写代码?
这个有关系吗? --------------------编程问答-------------------- 悄悄问下
id_no
你有赋值吗?
主键没有值你的记录怎么能插入到数据库
你试着在数据库里手动加条数据,不加id_no
然后提交,行吗????? --------------------编程问答-------------------- 数据库里的字段都是VARCHAR吗?
--------------------编程问答-------------------- 数据库里的字段都设置为文本了。
另外你说的哪个id_no是自动增加编码的,所以我在数据表里面添加一个名字,密码什么的,id_no那里会自动加一. --------------------编程问答-------------------- 原來是樓主沒有給值主鍵。。
試下給值主鍵試試。 --------------------编程问答-------------------- 我还不是不明白和关键字扯上什么关系呢?
刚才有位大哥在另个一帖子里说到用sql语句写代码,然后把我要插入的字段都加上[].
我改了以后,运行没有问题.谢谢各位了。
但是还是不名字插入的时候,和关键自有什么联系?另外,为什么我用具名参数插入插入不了? --------------------编程问答-------------------- 发表于:2007-12-21 14:24:3910楼 得分:0
password 是系统关键字吧改为[password]试试
--------------------编程问答-------------------- Insertinto Enternumber(username,password,易做图,work,tel,mail) values (@用户名,@密码,@性别,@职业,@电话,@邮箱)" 前面这个单词分开! --------------------编程问答-------------------- 单步调试一下! --------------------编程问答-------------------- 我知道了啊!报什么错呢!你要和大家说一下!否则怎么解决啊! --------------------编程问答-------------------- cmd.Parameters.Add(New OleDbParameter("@用户名", OleDbType.VarChar))
首先你的insertinto这个SQL语句是错误的,应该是insert into Enternumber(username,password,易做图,work,tel,mail) values (@用户名,@密码,@性别,@职业,@电话,@邮箱)
其次就是最关键的错误,parameters这个方法使用时一定要有这样一个语句cmd.commandtype=CommandType.StoredProcedure这个语句的作用是用存储方法来传值的,也就是说在你的数据库中一定要一个存储过程,
parameters方法的使用前面应该有,cmd.commandtype=commandtype.storedprocedure
cmd.commandtext="存储过程"
cmd.parameters.add(new oledbparameter("@存储变量的一个变量名",数值))
总体的来说就是问题处在了,cmd.commandtype=?和数据库中是否有对应的存储过程。
--------------------编程问答-------------------- 将insertcmd改成insertcmd .commandtext试试 --------------------编程问答-------------------- 不好意思看错,你这样不要用参数,直接用txtName.Text replace变量看行不行,如果可以就是参数的问题 --------------------编程问答-------------------- 绑定
建议就留2个参数 减少检查的范围 --------------------编程问答-------------------- Dim connstr,insertcmd As String
connstr = "Provider='Microsoft.Jet.OLEDB.4.0';Data Source=homework.mdb"
insertcmd = "Insert into Enternumber(username,password,易做图,work,tel,mail) values ('用户名','密码','性别','职业','电话','邮箱')"
Dim conn As OleDbConnection,cmd As OleDbCommand
conn = New OleDbConnection(connstr)
cmd =new oledbcommand(insertcmd,conn)
dim i as integer
conn.Open()
i=cmd.ExecuteNonQuery()
msgbox("恭喜你,注册成功!赶快去登陆吧!")
conn.close()
--------------------编程问答-------------------- 我的和楼主遇到的问题一样,我的是主键为空,无法写入,是因为数据库中没给该主键复制。
应在数据库中对该主键设自动标示,让其自增。就可以了。
谢谢各位的答案~~帮了大忙啊~
补充:.NET技术 , VB.NET