需要帮助!我无法在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
答案 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"