SQL-запрос не вводит значение моей переменной - PullRequest
0 голосов
/ 15 ноября 2010

У меня проблемы с написанием запроса с использованием переменных. Вот мой код

Dim bondnumber as String = "69836"

Dim PasswordCheck As String = "DECLARE @investor varchar(10), 
@thepassword varchar(20), @linkedserver2 varchar(25), @sql varchar(1000) "
PasswordCheck += "SELECT @investor = '" & bondnumber & "', 
@linkedserver2 = 'binfodev', "PasswordCheck += "@sql = 'SELECT * FROM ' + 
@linkedserver2 + ' WHERE bondno = ''@investor'' ' EXEC(@sql)"

Кажется, что в запросе переменные не передаются должным образом, и я не уверен, где я ошибаюсь

есть идеи?

Ответы [ 2 ]

3 голосов
/ 15 ноября 2010

Какую проблему вы видите конкретно?Может помочь дополнительная информация.

Что я могу сказать, так это то, что ваш код преобразуется в длинную строку SQL (вместо bondnumber вместо *1003*)

DECLARE @investor varchar(10), @thepassword varchar(20), @linkedserver2 varchar(25), @sql varchar(1000) SELECT @investor = '69836', @linkedserver2 = 'binfodev', @sql = 'SELECT * FROM ' + @linkedserver2 + ' WHERE bondno = ''@investor'' ' EXEC(@sql)

I 'Ставлю, если вы выполните это в окне запроса, это не удастся.Попробуйте добавить ; в конце каждого логического оператора.

Рассматривали ли вы просто сделать этот код хранимой процедурой и передать ей параметры?Подобный код довольно опасен (SQL-инъекция), труден для чтения и в целом немного уродлив.

Пример кода хранимой процедуры:

CREATE PROCEDURE dbo.usp_MyStoredProcedure 
      @Param1 INT = NULL
AS

SELECT * FROM MyTable Where Col1 = @Param1
0 голосов
/ 15 ноября 2010

@ Джейми - Лично я склонен считать, что гораздо понятнее немного разбить вещи, хотя это и не является технически необходимым.Я просто говорю, чтобы построить ваши переменные параметров отдельно, а затем добавить их как параметризованные (что-то вроде следующего):

Dim sql As String = "SELECT * FROM @LinkedServer WHERE bondno = @BondNumber"
Dim c As New SqlConnection("Your Connection String Here")
Dim cmd As SqlCommand = c.CreateCommand()
With cmd
    .CommandType = CommandType.Text
    .CommandText = sql
    .Parameters.Add(New SqlParameter("@LinkedServer", SqlDbType.VarChar)).Value = "binfodev"
    .Parameters.Add(New SqlParameter("@BondNumber", SqlDbType.VarChar)).Value = "69836"
End With
Dim dt As New DataTable
Dim da As New SqlDataAdapter(cmd)
da.Fill(dt)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...