VB.NET程序报错"参数化查询……未提供该参数!",求大神!

bszxhw 2017-08-02 04:36:45
写了个ecxel导入到datagridview,然后保存到sql表里的程序,现在能成功导入到sql里,但是总会出个报错框!代码如下:
Imports System.Data
Imports System.Data.OleDb
Imports System.Data.SqlClient
Public Class Form1
Dim cn As OleDbConnection
Dim cn2 As SqlConnection
Dim cm As OleDbCommand
Dim cm2 As SqlCommand
Dim da As OleDbDataAdapter
Dim da2 As SqlDataAdapter
Dim ds As DataSet
Private Sub 导入EXCEL_Click(sender As Object, e As EventArgs) Handles 导入EXCEL.Click
OpenFileDialog1.Filter = "xlsx|*.xlsx"
OpenFileDialog1.ShowDialog()
excel路径.Text = OpenFileDialog1.FileName
cn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excel路径.Text + ";Extended Properties='Excel 12.0;HDR=False;IMEX=1'")
da = New OleDbDataAdapter("select * from [Sheet1$]", cn)
ds = New DataSet()
da.Fill(ds, "DT")
DataGridView1.DataSource = ds.Tables("DT")
End Sub
Private Sub 保存到sql_Click(sender As Object, e As EventArgs) Handles 保存到sql.Click
cn2 = New SqlConnection("Data Source=192.168.1.110;Initial Catalog=UFDATA_999_2015;Integrated Security=False;User ID=sa;Password=***;")
cm2 = New SqlCommand("INSERT INTO zzztest (name,age) VALUES (@name,@age)", cn2)
For i As Integer = 0 To DataGridView1.Rows.Count - 1
cn2.Open()
cm2.Parameters.Add(New SqlParameter("@name", DataGridView1.Rows(i).Cells("姓名").Value))
cm2.Parameters.Add(New SqlParameter("@age", DataGridView1.Rows(i).Cells("年龄").Value))
cm2.ExecuteNonQuery()
cn2.Close()
cm2.Parameters.Clear()
Next
MessageBox.Show("已成功导入" & DataGridView1.Rows.Count - 1 & "条数据", "导入提示")
End Sub
End Class


点继续后是可以保存到sql数据库里的,但是会出这个框框!怎么改下呢?
...全文
548 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bszxhw 2018-02-09
  • 打赏
  • 举报
回复
For i As Integer = 0 To DataGridView1.Rows.Count - 1 改成 For i As Integer = 0 To DataGridView1.Rows.Count - 2 就行了!
xdashewan 2017-08-03
  • 打赏
  • 举报
回复
引用 5 楼 bszxhw 的回复:
是能成功导入数据库的,就是如何改下能让那个报错框不弹出来。
那个弹窗如你所述情况的话应该是个bug,建议你通过调试把他修正,而不是隐藏起来,你断点看看报错的时候各个参数值有没问题
bszxhw 2017-08-03
  • 打赏
  • 举报
回复


是能成功导入数据库的,就是如何改下能让那个报错框不弹出来。
bszxhw 2017-08-03
  • 打赏
  • 举报
回复
引用 3 楼 xdashewan 的回复:
[quote=引用 2 楼 bszxhw 的回复:] 移了,但是这个报错框还是在啊!
是不是你DataGridView1.Rows(i).Cells("姓名").Value为空啊,如果是空要用dbnull,参照http://www.cnblogs.com/ccweb/p/3403492.html[/quote] DataGridView1.Rows(i).Cells("姓名").Value这个值不是空值,DataGridView1里面的值是从excel导进去,没有空值的。
xdashewan 2017-08-03
  • 打赏
  • 举报
回复
引用 2 楼 bszxhw 的回复:
移了,但是这个报错框还是在啊!
是不是你DataGridView1.Rows(i).Cells("姓名").Value为空啊,如果是空要用dbnull,参照http://www.cnblogs.com/ccweb/p/3403492.html
bszxhw 2017-08-02
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
cn2.Open()和cn2.Close()移到循环外
移了,但是这个报错框还是在啊!
xdashewan 2017-08-02
  • 打赏
  • 举报
回复
cn2.Open()和cn2.Close()移到循环外

16,552

社区成员

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

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