【问题标题】:Conversion from type 'DBNull' to type 'Decimal' is not valid. - issue when Datagridview loads data from DB从“DBNull”类型到“Decimal”类型的转换无效。 - Datagridview 从数据库加载数据时的问题
【发布时间】:2012-10-07 01:42:26
【问题描述】:

我正在尝试将数据加载到 Visual Basic 中的 datagridview 中,但出现此错误。

从“DBNull”类型到“Decimal”类型的转换无效。 - Datagridview 从数据库加载数据时出现问题,

请在写回复时记住我是一个完全的新手。

顺便说一句,我尝试在某些 .ToString 的 Value 之后添加 ,

Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
    Dim i As Integer

    Me.TextBox1.Text = DataGridView1.Item(0, i).Value.ToString
    Me.TextBox8.Text = DataGridView1.Item(1, i).Value.ToString
    Me.TextBox9.Text = DataGridView1.Item(2, i).Value.ToString
    Me.TextBox11.Text = DataGridView1.Item(3, i).Value.ToString
    'valoren_code'
    Me.TextBox3.Text = DataGridView1.Item(4, i).Value.ToString
    Me.TextBox13.Text = DataGridView1.Item(5, i).Value.ToString
    Me.TextBox15.Text = DataGridView1.Item(6, i).Value.ToString
    Me.TextBox14.Text = DataGridView1.Item(7, i).Value.ToString
    Me.NumericUpDown6.Value = DataGridView1.Item(8, i).Value.ToString
    Me.DateTimePicker2.Text = DataGridView1.Item(9, i).Value.ToString
    Me.ComboBox1.SelectedItem = DataGridView1.Item(10, i).Value.ToString
    Me.ComboBox8.SelectedItem = DataGridView1.Item(11, i).Value.ToString
    Me.ComboBox2.SelectedItem = DataGridView1.Item(12, i).Value.ToString
    Me.ComboBox3.SelectedItem = DataGridView1.Item(13, i).Value.ToString
    Me.ComboBox4.SelectedItem = DataGridView1.Item(14, i).Value.ToString
    Me.ComboBox5.SelectedItem = DataGridView1.Item(15, i).Value.ToString
    Me.ComboBox6.SelectedItem = DataGridView1.Item(16, i).Value.ToString
    Me.ComboBox7.SelectedItem = DataGridView1.Item(17, i).Value.ToString
    Me.ListBox1.SelectedItem = DataGridView1.Item(18, i).Value.ToString
    Me.NumericUpDown8.Text = DataGridView1.Item(19, i).Value.ToString
    Me.NumericUpDown7.Text = DataGridView1.Item(20, i).Value.ToString
    Me.NumericUpDown5.Text = DataGridView1.Item(21, i).Value.ToString
    Me.NumericUpDown13.Text = DataGridView1.Item(22, i).Value.ToString
    Me.NumericUpDown14.Value = DataGridView1.Item(23, i).Value.ToString
    'mid_trade_clean_price_proximity
    Me.NumericUpDown15.Value = DataGridView1.Item(24, i).Value.ToString
    Me.NumericUpDown16.Value = DataGridView1.Item(25, i).Value
    Me.TextBox2.Text = DataGridView1.Item(26, i).Value.ToString
    Me.ListBox3.SelectedItem = DataGridView1.Item(27, i).Value.ToString
End Sub 

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    DBNull.Value 表示数据库已经为特定的行/列返回了NULL

    这不是可以分配给Decimal 的值,因此会出现错误。

    现在,当你得到DBNull.Value 时,你可以使用Nothing,但同样,这不是你可以分配给Decimal 的东西,因为它是一个值类型(并且所有值类型都有一个值并且不能分配了Nohthing)。

    使用 可为空 Decimal - Decimal?可以采用 Nothing 值。或者,测试返回的值以查看它是否为DBNull.Value,如果是,请不要分配给您的Decimal(默认为0.0,因此您需要确定您的应用程序的正确行为)。

    【讨论】:

    • @user1712552 - 你会怎么做what?请注意,您发布的没有代码,所以我们不能谈论任何具体的事情。
    • 如何使用可为空的小数?
    • @user1712552 - 我确实发布了。语法为Decimal?。您还可以搜索“可为空的小数”。但是使用您发布的代码,您真的应该简单地测试If xxx = DBNulll.Value Then
    • 我很抱歉。当您说分配或测试该值以查看它是否为 DBNuLL.Value 时,我真的不明白 - 如果您的意思是数据库中的值为 0,那么您是正确的。
    • @user1712552 - 数据库中的值不是0,而是NULL。这些是不同的东西。如果你不明白赋值或测试值的含义,我建议你拿起一本编程书——这些是基本概念。
    猜你喜欢
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多