Как выполнить оператор SELECT с помощью функции, вызываемой в предложении WHERE в приложении VB.NET? - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть таблица данных со столбцом «Дата».
Я нашел функцию SQL, которая возвращает европейский номер недели для даты (способ подсчета номера недели отличается от способа США).

Я написал свой запрос в виде строки в своем приложении VB.NET: (я включил функцию)

Connexion.Open()

Dim Rq As String = "CREATE FUNCTION dbo.F_NUMERO_SEMAINE_ISO  (@JOUR datetime)
    RETURNS int
    AS
    BEGIN
       DECLARE @NSI int;

       SET @NSI = DATEPART(wk, @JOUR) + 1 - DATEPART(wk, CAST(DATEPART(yy, @JOUR) as CHAR(4)) + '0104');

    -- cas particuliers : du 1 au 3 janvier, le jour peut appartenir à la dernière semaine de l'année précédente
       IF @NSI = 0
          SET @NSI = dbo.F_NUMERO_SEMAINE_ISO(CAST(DATEPART(yy,@JOUR)-1 AS CHAR(4)) + '12' + CAST(24 + DATEPART(DAY, @JOUR) AS CHAR(2))) + 1;

    -- cas particuliers : du 29 au 31 décembre, le jour peut appartenir à la première semaine de l'année suivante
       IF (DATEPART(mm, @JOUR) = 12) AND ( (DATEPART(dd, @JOUR) - DATEPART(dw, @JOUR) ) >= 28 ) 
          SET @NSI = 1;

       RETURN @NSI;
    END

    GO

    SELECT COUNT(*) FROM dbo.DATA WHERE dbo.F_NUMERO_SEMAINE_ISO(Date) = 34
    DROP function dbo.F_NUMERO_SEMAINE_ISO"

Dim Cmd As New SqlCommand(Rq, Connexion)
Try
    Dim Reader As Integer = Cmd.ExecuteScalar()
    MessageBox.Show("nb nouveau : " & Reader.ToString())
Catch ex As Exception
    MsgBox(ex.Message)
Finally
    Cmd.Dispose()
    Connexion.Close()
End Try

У меня ошибка в строке cmd.executeScalar ()

"Синтаксическая ошибка для 'GO'" И "Синтаксическая ошибка для 'F_NUMERO_SEMAINE_ISO'"

Я не знаю, как я могу вызвать мою функцию SQL из моегокод vb.net, но я уверен, что делаю что-то не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...