当前位置:编程学习 > C#/ASP.NET >>

急急急急啦...插入数据中代码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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,