将文本框字符串以十进制形式转换为数据库

Posted

技术标签:

【中文标题】将文本框字符串以十进制形式转换为数据库【英文标题】:Converting textbox string to a database as a decimal 【发布时间】:2016-02-18 12:25:37 【问题描述】:

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

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 和 access 数据库都显示 29。价格的数据库数据类型设置为“数字”,字段大小设置为“长整数”。

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()

我希望这有助于澄清。

【问题讨论】:

显示newrow中的输入和值,然后显示数据库中的值以及将其插入数据库的代码。目前您的问题无法回答。 convert.ToDecimal 应该可以解决问题。确保数据库中的数据字段具有正确的数据类型并且设置了足够的小数位 假设“价格”是数据库中的小数字段,对吗?该列的数据类型是什么? 由于源是文本框,所以应该使用Decimal.TryParse()进行验证和转换。它允许用户输入“我喜欢派”来支付费用。数据库列必须是支持分数的类型 - 整数类型不起作用 您说在Access中该字段被声明为Long Integer。这意味着它只能保存整数。即使您成功地将“28.57”转换为DecimalDecimal.TryParse 将是最好的方法),当它存储在数据库中时也必须四舍五入为整数。您需要将 Access 中的字段定义为 Decimal 而不是 Long Integer。 【参考方案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

【讨论】:

以上是关于将文本框字符串以十进制形式转换为数据库的主要内容,如果未能解决你的问题,请参考以下文章

在文本框中显示数据库中的十进制值

怎样把文件转换成二进制形式的文本文件?

c# 将字符串以二进制形式写入文件

MFC 将文本框内容转为十六进制的字符串

JAVA如何将二进制数转换成文件?

在 Delphi 中将宽字符代码点的十六进制字符串表示形式转换为宽字符