2016-01-08 3 views
0

Я делаю сайт, который, когда я нажимаю на определенную кнопку, будет показывать данные или статус. Но когда я нажимаю на нее, появляется Ошибка преобразования типа данных varchar в числовой.Ошибка преобразования типа данных varchar в числовой. Для отображения данных

Вот мой код

Dim ds As New DataSet 
    Try 
     ds = GetDataSet2("dateadd(mm, datediff(mm, 0, last_check), 0) as DateMonthly, SUM((convert(decimal(5,2), left(duration, 3))))/count(*) as AverageMonthly", "tblServices_Status AS TSES, tblWeb_Apps as TWA", "TSES.web_apps_id = TWA.web_apps_id AND TWA.web_apps_id = '" & appid & "' AND MONTH(last_check) = MONTH(dateadd(dd, -1, GetDate())) AND YEAR(last_check) = YEAR(dateadd(dd, -1, GetDate()))", "dateadd(mm, datediff(mm, 0, last_check), 0)", "dateadd(mm, datediff(mm, 0, last_check), 0)") 
     For Each dr As DataRow In ds.Tables(0).Rows 
      lblAppAveMonthly.Text = Format(Val(dr("AverageMonthly")), "0.00") + "s" 
     Next 
    Catch ex As Exception 
     Throw ex 
    Finally 
     ds.Dispose() 
    End Try 

Большое спасибо

Вот код для моего GetDataSet2

Public Shared Function GetDataSet2(ByVal columnname As String, ByVal databasename As String, ByVal condition As String, ByVal columngroup As String, ByVal columnorder As String) As DataSet 
    Dim conn As New SqlConnection() 
    conn = getConn() 
    Dim ds As New DataSet 
    Dim query As String 

    Try 
     If condition = "" Then 
      condition = "1 = 1" 
     End If 

     query = "SELECT " & columnname & " FROM " & databasename & " WHERE " & condition & " GROUP BY " & columngroup & " ORDER BY " & columnorder &"" 

     Dim sda As New SqlDataAdapter(query, conn) 

     sda.Fill(ds) 

     sda.Dispose() 
    Catch oError As Exception 
     Throw oError 
    Finally 
     If conn.State Then conn.Close() 
     conn.Dispose() 
    End Try 
    Return ds 
End Function 
+0

Здравствуйте, @arkeysi, можете ли вы показать свою функцию GetDataSet2 на вопросе о задании вопроса? –

+0

Мы не знаем, что происходит в GetDataSet2 (как уже указывал @willie). Эта конкретная ошибка исходит из вашей базы данных, сообщающей вам, что вы пытаетесь использовать буквенно-цифровое (varchar/string) значение, в котором НЕОБХОДИМЫЙ число. Я собираюсь рискнуть и сказать, что проблема заключается в этом коде: 'SUM ((конвертировать (десятичный (5,2), левый (продолжительность, 3))))/count (*) как AverageMonthly', но это довольно сложно решить, не зная, a) что делает эта функция GetDateSet2 действительно, и б) структура ваших таблиц и данных внутри них. – Jeroen

+0

[Изменить] ваше сообщение, чтобы добавить дополнительные данные кода. Код не форматируется в комментариях – Plutonix

ответ

0

Единственным вероятным кандидатом я вижу, предписывающий эта ошибка находится в этом бите:

SUM((convert(decimal(5,2), left(duration, 3))))/count(*) as AverageMonthly 

Запросить столбец duration для любых строк, где первые 3 символа не могут быть преобразованы в десятичный (5,2) тип данных.

Если у вас есть SQL Server 2012 или выше, функция TRY_PARSE() будет очень полезна здесь.

Смежные вопросы