将Varchar转换为int

时间:2014-10-17 00:31:47

标签: vb.net sql-server-2008

需要帮助!我无法在SQ L中检索数据,因为值为100-200 它说需要将它转换为Integer,但它是Var char数据类型。 所以我认为问题是关于“ - ”,那么代码中的错误就在于 数据表代码,那该怎么办?

Private Sub RetriveData(ByVal ID As String)
    If Sql.HasConnection() = True Then

        Dim DT As DataTable = Sql.ExecuteDataTable("SELECT (EmpID As varchar), FirstName,MidName,LastName,Gender,BirthDate,CivilStat,Address,ContactNum FROM EmployeeTable Where EmpID=" & ID)
        For Each Data As DataRow In DT.Rows
            EmpID_Txt.Text = Data(0)
            FirstName_Txt.Text = Data(1)
            MiddleName_Txt.Text = Data(2)
            LastName_Txt.Text = Data(3)
            Gender_CB.Text = Data(4)
            BirthDate_DTP.Value = Data(5)
            CivilStat_CB.Text = Data(6)
            Address_Txt.Text = Data(7)
            Contact_Txt.Text = Data(8)
        Next
    Else
        MsgBox("System Database Cannot be Connected", MsgBoxStyle.Information)
    End If
End Sub

2 个答案:

答案 0 :(得分:0)

实际上,假设某些100-200值位于某个表中,我会说错误发生在决定使用varchar来存储数值的开发人员的头脑中: - )< / p>

或者,或者决定采用其他自由格式文本字段且假设的开发人员,它总是一个数字值。

至于如何修复它,其中一段只需要解决。如果您想在表格中使用单个数字值,则应将其更改为数字类型字段,同时浏览所有100-200样式值并清理它们(对于示例, 150)。

如果您希望能够存储范围,那么处理它们的代码必须更加智能化,例如从列中提取较低和较高的值并运行循环处理范围内的所有值,或从(伪编码查询)更改查询:

where EmpId = ?value?

成:

where EmpId >= ?low? and EmpId <= ?high?

我们无法根据提供的信息告诉您哪个是最佳解决方案,这可能是商业决策而非技术决策。


如果我的假设是错误的并且它是ID参数(在where子句中使用)到函数RetriveData(原文如此),那么你需要阻止用户输入,或使处理参数的代码更加智能(类似于上面的循环/更改查询建议)。

答案 1 :(得分:0)

将ID作为SQL参数传递给您的查询:

"SELECT (EmpID As varchar), FirstName,MidName,LastName,Gender,BirthDate,CivilStat,Address,ContactNum FROM EmployeeTable Where Empid=@empid"