获取将nvarchar转换为数字的错误 [英] Getting error converting nvarchar to numeric

查看:94
本文介绍了获取将nvarchar转换为数字的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Protected Sub AddNewRecord()
        Dim _connStr As String = SharedLibrary.GetConfigSetting("MRI.ConnectionString")

        Using conn As SqlConnection = New SqlConnection(_connStr)
            Dim sql As String = "Insert into TB_NABERS_SUSTAINABILITY (BldgId,UTILITY_TYPE,FRMDT,TODT,UNIT_USAGE,UNIT_TYPE,GP,WRating) values (@BLDGID,@UTILITY_TYPE,@FRMDT,@TODT,@UNIT_USAGE,@UNIT_TYPE,'0.0',@WRating)"

            Using cmd As SqlCommand = New SqlCommand(sql, conn)

                cmd.Parameters.AddWithValue("@BLDGID", BldgId.Trim())
                cmd.Parameters.AddWithValue("@UTILITY_TYPE", naberText(UtilityType))
                cmd.Parameters.AddWithValue("@FRMDT", DateTime.ParseExact(txtFromDate.Text.Trim(), "d/M/yyyy", CultureInfo.InvariantCulture))
                cmd.Parameters.AddWithValue("@TODT", DateTime.ParseExact(txtToDate.Text.Trim(), "d/M/yyyy", CultureInfo.InvariantCulture))
                cmd.Parameters.AddWithValue("@UNIT_USAGE", txtUsage.Text.Trim())
                cmd.Parameters.AddWithValue("@UNIT_TYPE", naberUnit(UtilityType))
                'If txtGreenPower.Text.Trim() = "" Then
                '    cmd.Parameters.AddWithValue("@GP", 0.0)
                'Else
                '    cmd.Parameters.AddWithValue("@GP", txtGreenPower.Text.Trim())
                'End If

                If TextWaterRating.Text.Trim = "" Then
                    cmd.Parameters.AddWithValue("@WRating", 0.0)
                Else
                    cmd.Parameters.AddWithValue("@WRating", Convert.ToDecimal(TextWaterRating.Text.Trim()))
                End If

                conn.Open()
                cmd.ExecuteNonQuery()

                conn.Close()
            End Using





i有表TB_NABERS_SUSTAINABILITY列Wrating Decimal(10,2)



我尝试过:





i have the table TB_NABERS_SUSTAINABILITY column Wrating Decimal(10,2)

What I have tried:

i have the table TB_NABERS_SUSTAINABILITY column Wrating Decimal(10,2)





i也转换为十进制



i have also converted to decimal

推荐答案

不要只是传递用户输入到SQL并让它排序:在开始使用DB之前检查并将用户输入转换为适当的数据类型,并直接向用户报告问题。

Don't just pass user inputs to SQL and let it sort it out: check and convert user inputs to appropriate datatypes before you start with the DB stuff, and report problems direct to the user.
Dim fromDate As DateTime
If Not DateTime.TryParseExact(txtFromDate.Text.Trim(), "d/M/yyyy", CultureInfo.InvariantCulture, fromDate) Then
	... Report problem to user ...
	Return
End If
...
Dim unitUsage As Decimal
If Not Decimal.TryParse(txtUsage.Text.Trim(), uintUsage) Then
	... Report problem to user ...
	Return
End If
...
cmd.Parameters.AddWithValue("@FRMDT", fromDate)
cmd.Parameters.AddWithValue("@TODT", toDate)
cmd.Parameters.AddWithValue("@UNIT_USAGE", unitUsage)

这样,用户可以获得更好的错误按摩比你的应用程序崩溃,你得到更容易阅读的更强大的代码。

That way, the user gets a better error massage than your app crashing, and you get more robust code that is a lot easier to read.


这篇关于获取将nvarchar转换为数字的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆