无法实现向表里添加记录

kof1000 2008-03-25 10:29:15
操作窗口里有label1,label2,label3,label4. textbox1,textbox2,textbox3,textbox4. button1,button2,button3,
button4,button5
控件布置如下:
label1: [ textbox1 ] label2 : [ textbox2 ]
label3: [ textbox3 ] label4 : [ textbox4 ]

[label5]
[button1] [button2] [button3] [button4]
[button5]
具体界面如下:
姓名: [ textbox1 ] 地址 : [ textbox2 ]
编号: [ textbox3 ] Email : [ textbox4 ]

[label5]
[首条记录] [上一条] [下一条] [尾条记录]
[添加]

实现步骤:
当单击"增加"按钮时,先清空文本框,并将按钮提示改变成"确认",当在文本框输入完数据后,再单击"确认"按钮,将输入到文本框的数据构成一条记录插入到表里,重新填充数据源并恢复按钮提示.

表Readerdetails的结构如下:
列表 数据类型 长度 允许空
SN char 15
ISBN char 20 Yes
BookName varchar 50 Yes
BookCode char 20 Yes
BookType varchar 50 Yes
BookDes varchar 50 Yes
AuthorName char 20 Yes
PublishData varchar 50 Yes
Edition char 10 Yes
BookStatus char 10 Yes
LibDate char 30 Yes


按钮“增加”(button1)的 Click事件代码如下:
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
If Button5.Text = "确定" Then
objConn.Open() '打开已建立好的连接对象
Dim name As New OdbcParameter("@name", OdbcType.Char, 10) '定义Insert语句中的参数
Dim addr As New OdbcParameter("@addr", OdbcType.Char, 60)
Dim readerNo As New OdbcParameter("@readerNo", OdbcType.Char, 10)
Dim Email As New OdbcParameter("@Email", OdbcType.Char, 30)

Dim strIn As String = "Insert into ReaderDetails_(ReaderName,Address,ReaderNo,ReaderEmail)" & _
"Values(@name,@addr,@readerNo,@Email)"

Dim objCmd As New OdbcCommand(strIn, objConn) '创建命令对象

objCmd.Parameters.Add(name) '添加参数到objCmd的参数集中
objCmd.Parameters.Add(addr)
objCmd.Parameters.Add(readerNo)
objCmd.Parameters.Add(Email)

name.Value = TextBox1.Text '为参数赋值
addr.Value = TextBox2.Text
readerNo.Value = TextBox3.Text
Email.Value = TextBox4.Text

objCmd.ExecuteNonQuery() '进行更新
objConn.Close() '关闭连接
Dim strSql = "select * from ReaderDetails" '增加记录后重新填充数据集
objAdap.SelectCommand = New OdbcCommand(strSql, objConn)
objDSet.Clear()
objAdap.Fill(objDSet, "ReaderDetails")
Button5.Text = "增加" '(1)--------------------(1) '恢复按钮提示
MyBind.Position = MyBind.Count - 1 '指向最后一条记录
Label5.Text = (MyBind.Position + 1) & "/" & MyBind.Count
MsgBox("更新成功")
Else
TextBox1.Text = "" '清空文本框
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
Button5.Text = "确认" '改变按钮提示
End If
End Sub

说明:能正确连接到数据库,[首条记录] [上一条] [下一条] [尾条记录]这几个按钮的功能都正常

问题:点了“增加” 按钮后 ,“增加”按钮的Text变成 "确认",但填完 "姓名" . "地址" . "编号" . "Email"的文本框

按"确认"按钮后,"姓名" . "地址" . "编号" 和 "Email" 的文本框的内容立马被清空,这些数据却没有被添加到表

ReaderDetails中,还有就是"确认"按钮的Text并没有变成"增加".也就是程序根本没有执行到(1)--------------------------------(1)这一行.

哪位朋友能帮看一下是怎么回事吗
...全文
94 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangguiyou 2008-03-28
  • 打赏
  • 举报
回复
objCmd.Parameters.Add("@name", SqlDbType.VarChar).Value=???
試用這個吧。。。把這個改了。。我把這個SqlDbType改一下。。我忘了是什麼。。好像是oldb....什麼這類的。
水如烟 2008-03-27
  • 打赏
  • 举报
回复
按添加的顺序对应;
“名称”是为了阅读方便。

如果想按名称来对应,使用SqlClient
kof1000 2008-03-27
  • 打赏
  • 举报
回复
按照lzmtw朋友说的把
Dim strIn As String = "Insert into ReaderDetails_(ReaderName,Address,ReaderNo,ReaderEmail)" & _
"Values(@name,@addr,@readerNo,@Email)"
改成:
Dim strIn As String = "Insert into ReaderDetails_(ReaderName,Address,ReaderNo,ReaderEmail)" & _
"Values(?,?,?,?)"
后能正常插入数据了.
但是我想不通,把"Values(@name,@addr,@readerNO,@Email)"改成"Values(?,?,?,?)"后,程序是如何将文本框内的值
传送到Insert语句的?还有输入到文本框的值的顺序是如何与Insert语句中的ReaderName,Address,ReaderNo,ReaderEmail这几个属性的顺序匹配呢
还有一个问题就是Dim name As New OdbcParameter("@name", OdbcType.Char, 10)中的@name没用吗
水如烟 2008-03-26
  • 打赏
  • 举报
回复
既然是SqlServer,建议使用SqlClient.

你这句错:
Dim strIn As String = "Insert into ReaderDetails_(ReaderName,Address,ReaderNo,ReaderEmail)" & _
"Values(@name,@addr,@readerNo,@Email)"
应该是:
Dim strIn As String = "Insert into ReaderDetails_(ReaderName,Address,ReaderNo,ReaderEmail)" & _
"Values(?,?,?,?)"
herol 2008-03-26
  • 打赏
  • 举报
回复
声明的是 name
错误是 必须声明变量 '@name'
不是一回事

把SQL语句提出来,拿查询分析器里执行看看,应该是SQL语句语法有问题
kof1000 2008-03-26
  • 打赏
  • 举报
回复
.....
原来竟然是这个错...
把 If Button5.Text = "确定" Then
改成 If Button5.Text = "确认" Then后
运行提示objCmd.ExecuteNonQuery()这行有错
错误提示:ERROR [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]必须声明变量 '@name'。
但是我已经声明了啊,如: Dim name As New OdbcParameter("@name", OdbcType.Char, 10) '定义Insert语句中的参数

(能正常实现添加功能加 30分 摆脱各位了)
SYUEHOKO 2008-03-26
  • 打赏
  • 举报
回复
LZ 应该先调试一下.在哪一行出错.在贴出来.
yudi010 2008-03-26
  • 打赏
  • 举报
回复
If Button5.Text = "确定" Then


Button5.Text = "确认"


所以永远不会匹配

其实你单步调试就出来了,最好不要用这个方法,可以设置个全局变量么
yudi010 2008-03-26
  • 打赏
  • 举报
回复
你说的是确认
可是你的判断条件是 确定 啊 老大!
所以,当然是执行下面的清空事件了
李忠同 2008-03-26
  • 打赏
  • 举报
回复
把sql语句拿出来到查询分析器控制一下
hurtsobad 2008-03-26
  • 打赏
  • 举报
回复
"Insert into ReaderDetails_(ReaderName,Address,ReaderNo,ReaderEmail)" & _
"Values(@name,@addr,@readerNo,@Email)"這句那個表名字怎麼多了 "ReaderDetails_"

16,717

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧