2014-10-17 5 views
0

Нужна помощь! Я не могу получить данные в SQ L, потому что это значение 100-200 , и он говорит, что его нужно преобразовать в Integer, но это тип данных Var char. Итак, я думаю, что проблема связана с «-», тогда ошибка в коде находится в код таблицы данных, так что делать?Преобразование Varchar в int

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

Добавьте код, который у вас есть проблемы – Seminda

+0

Не использовать конкатенацию, чтобы включить данные в своих запросах. Это может оставить вас сумасшедшими, уязвимыми для SQL-инъекций. –

+0

Это не конкатенация строк как таковая, которая приводит к инъекционным атакам, это конкатенация ненадежных данных, например, введенных пользователем. Например, конкатенация строки, сформированной вашей программой (где вы контролируете значения), совершенно безопасна. – paxdiablo

ответ

0

Передайте идентификатор в качестве параметра SQL для запроса:

"SELECT (EmpID As varchar), FirstName,MidName,LastName,Gender,BirthDate,CivilStat,Address,ContactNum FROM EmployeeTable Where [email protected]" 
+2

Действительно? Включить его в кавычки? Если это действительно строка, это всего лишь еще одно указание на то, что здесь можно использовать произвольный текст, а это означает, что метод котировок практически просят взломать. -1 для того, чтобы рекомендовать кому-то расширить или ввести дефект безопасности в свой код. Используйте параметры запроса! –

+1

Это, вероятно, решит его фактическое сообщение об ошибке. Проблема безопасности - еще одна проблема –

0

На самом деле, если предположить, эти 100-200 значения находятся в таблице где-то, я бы сказал, что ошибка была в черепе разработчика, который решил использовать varchar для хранения числового значения :-)

Либо что или разработчик, решивший использовать текстовое поле в свободной форме и предположил, что всегда был единственным числовым значением.

Что касается того, как исправить это, один из этих абзацев просто нужно обойти. Если вы хотите получить одно числовое значение в таблице, вы должны изменить его на поле числового типа, пройдя все значения стиля 100-200 и очистив их (в, например, для , 150).

Если вы хотите иметь возможность хранить диапазоны, то ваш код, который обрабатывает, должен быть более интеллектуальным, например, извлечение нижнего и верхнего значения из столбца и запуск цикла для обработки всех значений в пределах диапазона, или изменяя запрос от (псевдо-codish запрос):

where EmpId = ?value? 

в:

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

Мы не можем сказать вам который является б Это решение, скорее всего, будет скорее бизнес-решением, чем техническим.


Если мое предположение неверно, и это ID аргумент (используется в пункте where) к функции RetriveData (СИК), то вам необходимо либо остановить пользователей, введя это, или сделать код, который обрабатывает аргумент более интеллектуальный (аналогично предложению looping/changed-query выше).

+0

есть ли какой-либо символ от меня для использования, чтобы я мог заменить «-» или, если это не так, сделанный, я просто настрою базу данных –