在vb.NET中的Microsoft.VisualBasic.dll中发生了'System.InvalidCastException'类型的第一次机会异常

时间:2012-07-18 22:51:01

标签: vb.net tostring datetimepicker sqlcommand numericupdown

我是Visual Studio和SQL Server的新手。我对如何从visual studio应用程序插入数据感到困惑

我收到System.InvalidCastException错误。我很困惑这是什么问题。

这是我的代码:

PatientInfoConnection.Open() 'open database connection

Dim sql As String = ""
sql = "insert into model (name, age, date_of_confinement, type_of_sickness, type_of_IVfluid, number_of_bottles, drop_rate)" & _
                   " values (@name, @age, @date_of_confinement, @type_of_sickness, @type_of_IV_fluid, @number_of_bottles, @drop_rate)"

Dim insert As New SqlCommand(sql, PatientInfoConnection)

insert.Parameters.AddWithValue("@name", txtName.Text)
insert.Parameters.AddWithValue("@age", nudAge.Value.ToString())
insert.Parameters.AddWithValue("@date_of_confinement", dtpDate.Value.ToString())
insert.Parameters.AddWithValue("@type_of_sickness", txtSickness.Text)
insert.Parameters.AddWithValue("@type_of_IV_fluid", txtFluid.Text)
insert.Parameters.AddWithValue("@number_of_bottles", txtBottle.Text)
insert.Parameters.AddWithValue("@drop_rate", nudDrop.Value.ToString())

insert.ExecuteNonQuery()

我在想我的价值观存在问题。 nudAge.Value是数字向下,在我的sql数据库中,它是Age(int,null)。我也有dtpDate.Value。日期时间选择器。我想我不应该使用ToString(),但我不知道语法..

任何人都可以帮助我吗?任何帮助,将不胜感激。谢谢!

date_of_confinement是我的数据库中的日期时间。 格式应该是这样的吗?     insert.Parameters.AddWithValue(“@ date_of_confinement”,dtpDate.Value.ToShortDateString)

另外,我做到了          insert.Parameters.AddWithValue(“@ number_of_bottles”,Int32.Parse(txtBottle.Text))

但我仍然有错误。我糊涂了。谢谢你的帮助!

这就是我现在所做的......         insert.Parameters.AddWithValue(“@ date_of_confinement”,Date.Parse(dtpDate.Value))

我也做了如下更改:

   insert.Parameters.AddWithValue("@age", Convert.ToInt32(txtAge.Text))        
   insert.Parameters.AddWithValue("@number_of_bottles", Convert.ToInt32(txtBottle.Text)) 
   insert.Parameters.AddWithValue("@drop_rate", Convert.ToInt32(txtDrop.Text)) 

我不再有错误但是当我点击保存时,它甚至没有做任何事情,甚至关闭表格并打开另一个表格。什么都没做

感谢您的帮助! N,N-

1 个答案:

答案 0 :(得分:0)

如果date_of_confinement是db中的日期时间,则应将其作为Date传递给SqlParameter。只需删除ToString即可。 NumericUpDown值也是如此。

insert.Parameters.AddWithValue("@name", txtName.Text)
insert.Parameters.AddWithValue("@age", nudAge.Value)
insert.Parameters.AddWithValue("@date_of_confinement", dtpDate.Value)
insert.Parameters.AddWithValue("@type_of_sickness", txtSickness.Text)
insert.Parameters.AddWithValue("@type_of_IV_fluid", txtFluid.Text)
insert.Parameters.AddWithValue("@number_of_bottles", Int32.Parse(txtBottle.Text))
insert.Parameters.AddWithValue("@drop_rate", nudDrop.Value)

请注意,我还将txtBottle.Text解析为整数,因为我假设number_of_bottles是db中的int列。