我一直在尝试将文本框中的字符串转换为十进制数字添加到数据库中。我尝试的一切都没有奏效。我得到的数字已经四舍五入。
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()
我希望这有助于澄清。
答案 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