Computechsoft Ответов: 3

Значение типа "строка не может быть преобразована в команду SQL"


Эта команда запросов в SQL сервере не вопрос успешно работать без ошибок
когда я подаю заявление в vb.net эта ошибка показывает.
(Значение типа "строка не может быть преобразована в команду SQL") ?

Что я уже пробовал:

SQL Server

SELECT V_Date, V_Time,(SELECT  Max(ptd.Active) 
FROM Master AS ptd WHERE   ptd.Invoice_No = pt.Invoice_No) AS "Activate" 
FROM P_Detail AS pt where pt.V_Date = '2020-03-20' and pt.Invoice_No = '100'


VB.NET

Dim da = New SqlDataAdapter("SELECT V_Date, V_Time,("Select  Max(ptd.Active), FROM Master As ptd WHERE   ptd.Invoice_No = pt.Invoice_No) As "Activate" FROM P_Detail As pt where pt.V_Date = '" & PDate & "' and pt.Invoice_No = '" & MNumber & "'", SQLCon)

3 Ответов

Рейтинг:
21

OriginalGriff

Ну нет. А чего ты ожидал?
Это не допустимая строка или даже близко - если вы уберете связанные с DataAdapter биты, вы сможете увидеть ее легче:

Dim s As String = "SELECT V_Date, V_Time,("Select  Max(ptd.Active), FROM Master As ptd WHERE   ptd.Invoice_No = pt.Invoice_No) As "Activate" FROM P_Detail As pt where pt.V_Date = '" & PDate & "' and pt.Invoice_No = '" & MNumber & "'"

Попробуйте сократить использование двойных кавычек:
Dim sql As String = "SELECT V_Date, " &
                           "V_Time, " &
                           "(SELECT  Max(ptd.Active), " &
                            "FROM Master As ptd " &
                            "WHERE ptd.Invoice_No = pt.Invoice_No) As [Activate] " &
                    "FROM P_Detail As pt " &
                    "WHERE pt.V_Date = '" & pDate & "' " &
                      "AND pt.Invoice_No = '" & MNumber & "'"
И используй это вместо этого.


Рейтинг:
17

phil.o

В вашем VB-коде есть несколько синтаксических ошибок, и запрос можно оптимизировать, объединив таблицы. Кроме того, вы не должны создавать свои SQL-запросы путем объединения строк, потому что это оставляет ваш код открытым для атак SQL-инъекций; вместо этого лучше использовать параметризованные запросы. С адаптером, вероятно, лучше сначала построить командный объект и использовать его для сборки адаптера:

Using cmd As New SqlCommand("SELECT pt.V_Date, pt.V_Time, Max(ptd.Active) As Activate FROM P_Detail As pt INNER JOIN Master As ptd ON ptd.Invoice_No = pt.Invoice_No WHERE pt.V_Date = @pdate and pt.Invoice_No = @invoiceno", SQLCon)

   cmd.Parameters.Add("@pdate", DbType.DateTime).Value = PDate
   cmd.Parameters.Add("@invoiceno", DbType.String).Value = MNumber

   Using da As New SqlDataAdapter(cmd)

      '' ...

   End Using

End Using


Рейтинг:
11

Patrice T

Dim da = New SqlDataAdapter("SELECT V_Date, V_Time,("Select  Max(ptd.Active), ...
'              The error is the double quote here   ^