Vb.net 无法将参数值从字符串转换为int32

Vb.net 无法将参数值从字符串转换为int32,vb.net,Vb.net,看起来您正在将DataGridView中的几个值插入数据库,它们都具有相同的InvoiceNo 为了更容易看到哪个参数是哪个,您可以通过参数名称来引用它们 要确保数据类型正确,请使用各种函数 您需要为每一行数据执行查询。无需清除参数,只需更改每个参数的值 因此,您的代码将以如下方式结束: cmd1.CommandText = "insert into tblInvoiceDetails (InvoiceNo)values(@InvoiceNo )" With cmd1.Parameters

看起来您正在将DataGridView中的几个值插入数据库,它们都具有相同的InvoiceNo

为了更容易看到哪个参数是哪个,您可以通过参数名称来引用它们

要确保数据类型正确,请使用各种函数

您需要为每一行数据执行查询。无需清除参数,只需更改每个参数的值

因此,您的代码将以如下方式结束:

cmd1.CommandText = "insert into tblInvoiceDetails (InvoiceNo)values(@InvoiceNo )"

With cmd1.Parameters
    .AddWithValue("@InvoiceNo", NumericUpDown1.Value)

     cmd1.CommandText = "insert into tblInvoiceDetails (itemno,ItemName,Qt,Price,Total)values(@itemno,@ItemName,@Qt,@Price,@Total)"
     'cmd1.Parameters.Add("@InvoiceNo", NumericUpDown1 .Value )
      cmd1.Parameters.Add("@itemno", SqlDbType.Int)
      cmd1.Parameters.Add("@ItemName", SqlDbType.VarChar)
      cmd1.Parameters.Add("@Qt", SqlDbType.Int)
      cmd1.Parameters.Add("@Price", SqlDbType.Money)
      cmd1.Parameters.Add("@Total", SqlDbType.Money)

      For x As Integer = 0 To DataGridView2.RowCount - 1
          cmd1.Parameters(0).Value = DataGridView2.Rows(x).Cells(0).Value
          cmd1.Parameters(1).Value = DataGridView2.Rows(x).Cells(1).Value
          cmd1.Parameters(2).Value = DataGridView2.Rows(x).Cells(2).Value
          cmd1.Parameters(3).Value = DataGridView2.Rows(x).Cells(3).Value
          cmd1.Parameters(4).Value = DataGridView2.Rows(x).Cells(4).Value
      Next
End With

cmd1.ExecuteNonQuery()
cmd1.Parameters.Clear()
负责清理SqlConnection和SqlCommand使用的非托管资源

当您有一个字符串参数(本例中为@ItemName)时,最好告诉它数据库中列的大小。我猜是128,但你应该输入实际值


此外,您确实应该为控件指定有意义的名称,例如“InvoiceNoSelector”而不是“NumericUpDown1”。

看起来您正在将DataGridView中的多个值插入数据库,并且它们都具有相同的InvoiceNo

为了更容易看到哪个参数是哪个,您可以通过参数名称来引用它们

要确保数据类型正确,请使用各种函数

您需要为每一行数据执行查询。无需清除参数,只需更改每个参数的值

因此,您的代码将以如下方式结束:

cmd1.CommandText = "insert into tblInvoiceDetails (InvoiceNo)values(@InvoiceNo )"

With cmd1.Parameters
    .AddWithValue("@InvoiceNo", NumericUpDown1.Value)

     cmd1.CommandText = "insert into tblInvoiceDetails (itemno,ItemName,Qt,Price,Total)values(@itemno,@ItemName,@Qt,@Price,@Total)"
     'cmd1.Parameters.Add("@InvoiceNo", NumericUpDown1 .Value )
      cmd1.Parameters.Add("@itemno", SqlDbType.Int)
      cmd1.Parameters.Add("@ItemName", SqlDbType.VarChar)
      cmd1.Parameters.Add("@Qt", SqlDbType.Int)
      cmd1.Parameters.Add("@Price", SqlDbType.Money)
      cmd1.Parameters.Add("@Total", SqlDbType.Money)

      For x As Integer = 0 To DataGridView2.RowCount - 1
          cmd1.Parameters(0).Value = DataGridView2.Rows(x).Cells(0).Value
          cmd1.Parameters(1).Value = DataGridView2.Rows(x).Cells(1).Value
          cmd1.Parameters(2).Value = DataGridView2.Rows(x).Cells(2).Value
          cmd1.Parameters(3).Value = DataGridView2.Rows(x).Cells(3).Value
          cmd1.Parameters(4).Value = DataGridView2.Rows(x).Cells(4).Value
      Next
End With

cmd1.ExecuteNonQuery()
cmd1.Parameters.Clear()
负责清理SqlConnection和SqlCommand使用的非托管资源

当您有一个字符串参数(本例中为@ItemName)时,最好告诉它数据库中列的大小。我猜是128,但你应该输入实际值


此外,您确实应该为控件指定有意义的名称,例如“InvoiceNoSelector”而不是“NumericUpDown1”。

是否收到任何错误消息?如果是这样的话,你可能应该把它添加到你的问题中。另外,这个问题可能会得到一些上下文的帮助,比如我尝试执行X,因为Y,我希望我的输入A看起来像输出B,但它看起来像这样。虽然使用SQL参数是正确的,但请注意,并且
cmd1.parameters(1).Value=DataGridView2.Rows(X).Cells(1).Value
可能应该是
cmd1.Parameters(1).Value=Convert.ToInt32(DataGridView2.Rows(x).Cells(1.Value)
,对于另一个
SqlDbType.Int
参数也是如此,对于
SqlDbType.Money
参数,使用
Convert.ToDecimal
。但是,您可能希望阅读“永远不要使用金钱。它不精确,而且纯粹是垃圾;始终使用十进制/数字。”cmd1.Parameters.Add(“@InvoiceNo”,SqlDbType.Int),我认为您可能会将参数索引减一,因为参数(0)将是@InvoiceNo。您收到任何错误消息吗?如果是这样的话,你可能应该把它添加到你的问题中。另外,这个问题可能会得到一些上下文的帮助,比如我尝试执行X,因为Y,我希望我的输入A看起来像输出B,但它看起来像这样。虽然使用SQL参数是正确的,但请注意,并且
cmd1.parameters(1).Value=DataGridView2.Rows(X).Cells(1).Value
可能应该是
cmd1.Parameters(1).Value=Convert.ToInt32(DataGridView2.Rows(x).Cells(1.Value)
,对于另一个
SqlDbType.Int
参数也是如此,对于
SqlDbType.Money
参数,使用
Convert.ToDecimal
。但是,您可能希望阅读“永远不要使用金钱。它不精确,而且纯粹是垃圾;始终使用十进制/数字。”cmd1.Parameters.Add(“@InvoiceNo”,SqlDbType.Int),我认为您可能会将参数索引减少1,因为参数(0)将是@InvoiceNo。