如何将VS Code中计算的小数数值保存至MS Access数据库
VB.NET学生成绩系统:小数平均分无法保存到Access数据库的解决方法
问题场景
用VB.NET开发学生成绩系统,计算出的平均分若为小数,系统提示保存成功,但Access数据库中未存储该数值;仅整数平均分能正常保存。已设置Access字段允许小数位,代码中相关变量均为Double类型,核心代码如下:
Dim average As Double Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Try Me.Student_GradesBindingSource.EndEdit() Me.TableAdapterManager.UpdateAll(StudentGradesDataSet) MsgBox("Success") Catch ex As Exception MsgBox("Please try again") End Try End Sub Private Sub btnCalc_Click(sender As Object, e As EventArgs) Handles btnCalc.Click Try Dim geo As Double Dim comp As Double Dim maths As Double Dim sci As Double Dim grade As String Dim avg As Double geo = GeographyTextBox.Text sci = ScienceTextBox.Text maths = MathematicsTextBox.Text comp = ComputerTextBox.Text If ((geo > 100) Or (sci > 100) Or (comp > 100) Or (maths > 100)) Then MsgBox("Marks cannot be more than 100") End End If avg = (geo + sci + comp + maths) / 4 If avg < 60 Then grade = "Failed" Else grade = "Passed" End If AverageTextBox.Text = avg GradeTextBox.Text = grade Catch ex As Exception MsgBox("try") End Try End Sub
解决步骤
确认Access字段类型配置
检查数据库中存储平均分的字段:- 字段类型必须为
Number,字段大小选择Double或Decimal(不要选Integer/Long); - 设置合适的小数位数(比如2位);
- 若之前是整数类型修改而来,需删除旧的数据集并重新生成,避免TableAdapter仍绑定旧类型。
- 字段类型必须为
修正数据集列类型
打开项目中的StudentGradesDataSet.xsd:- 找到对应的数据表,查看
Average列的数据类型; - 若为
System.Int32(整数),手动改为System.Double; - 右键数据集选择“生成数据集”,更新TableAdapter的映射关系。
- 找到对应的数据表,查看
优化文本转数值逻辑
直接赋值TextBox.Text到Double变量存在隐式转换风险,改用Double.TryParse确保转换有效:' 以地理成绩为例,其他科目同理 If Not Double.TryParse(GeographyTextBox.Text, geo) Then MsgBox("地理成绩请输入有效数字") Return End If避免非数字输入导致的隐性错误,保证计算出的平均分是合法的Double值。
确保数据同步时机
在保存前触发文本框的验证,确保内容同步到BindingSource:Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Try ' 先验证并提交文本框内容到绑定源 AverageTextBox.Validate() GradeTextBox.Validate() Me.Student_GradesBindingSource.EndEdit() Me.TableAdapterManager.UpdateAll(StudentGradesDataSet) MsgBox("Success") Catch ex As Exception MsgBox("保存失败:" & ex.Message) End Try End Sub完善异常信息捕获
修改Catch块输出详细错误,快速定位问题:Catch ex As Exception MsgBox("错误详情:" & ex.Message & vbCrLf & "调用栈:" & ex.StackTrace) End Try
内容的提问来源于stack exchange,提问作者AST4AY
相关产品推荐
相关产品推荐

