将文本框字符串作为小数转换为数据库

时间:2016-02-18 12:25:37

标签: vb.net

我一直在尝试将文本框中的字符串转换为十进制数字添加到数据库中。我尝试的一切都没有奏效。我得到的数字已经四舍五入。

newrow("Price") = Convert.ToDecimal(txtCost.Text)
newrow("Price") = Convert.ToInt32(txtCost.Text)
newrow("Price") = Cdbl(txtCost.Text)
newrow("Price") = Cdec(txtCost.Text)

我知道这里有很多信息,但我找不到任何有用的信息。

我的文本框包含28.57,当添加行时,我的gridview和访问数据库都显示29.价格的数据库数据类型设置为" Number"和字段大小"长整数"。

Private Sub DataGridView5_RowHeaderMouseDoubleClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView5.RowHeaderMouseDoubleClick



    i = DataGridView5.CurrentRow.Index
    txtPartNum.Text = DataGridView5.Item(0, i).Value
    txtTitle.Text = DataGridView5.Item(4, i).Value
    txtCost.Text = DataGridView5.Item(3, i).Value

    Dim cb As New OleDb.OleDbCommandBuilder(da)
    Dim tbl As DataTable = ds.Tables("Material")
    Dim newrow As DataRow = tbl.NewRow()
    cb.QuotePrefix = "["
    cb.QuoteSuffix = "]"

    newrow("Decription") = txtTitle.Text
    newrow("Part_Num") = txtPartNum.Text
    newrow("Price") = Convert.ToDecimal(txtCost.Text)
    newrow("Job_Title") = Form3.txtJob_Title.Text


    ds.Tables("Material").Rows.Add(newrow)
    da.Update(ds, "Material")

    'SET UP THE PROVIDER
    dbProvider = "PROVIDER=Microsoft.ACE.OLEDB.12.0;"

    'SET THE DATABASE AND WHERE THE DATABASE IS
    TheDatabase = "/WOG.accdb"
    MyFolder = "C:\WorkOrderGen"
    FullDatabasePath = MyFolder & TheDatabase

    'SET THE DATA SOURCE
    dbSource = "Data Source = " & FullDatabasePath

    'SET THE CONNECTION STRING
    con.ConnectionString = dbProvider & dbSource

    'OPEN THE DATABASE
    con.Open()

    'STORE THE SQL STRING AND CONNECTION OBJECT TO THE DATA_ADAPTER
    sql = "SELECT * FROM Material WHERE [Job_Title] LIKE " & "'%" & Form3.txtJob_Title.Text & "%'"

    da = New OleDb.OleDbDataAdapter(sql, con)
    ds.Clear()
    da.Fill(ds, "Material")
    Form3.DataGridView3.DataSource = ds.Tables("Material")

    'Close THE DATABASE  '
    con.Close()

我希望这有助于澄清。

1 个答案:

答案 0 :(得分:1)

如果要将价格存储为Access中的小数值,则需要将Access中的价格字段大小设置为Decimal而不是Long Integer

在将TextBox的内容转换为Decimal之前,应检查TextBox是否包含有效的十进制数。您可以使用Decimal.TryParse验证输入并将其转换为Decimal。如果文本无效,您必须决定要做什么。

Dim price As Decimal
If Not Decimal.TryParse(TextBox1.Text, price) Then
    'Textbox does not contain a decimal number - do whatever you think is appropriate
    Exit Sub
End If
newrow("Price") = price