2010-11-15 2 views
0

Je rencontre des problèmes pour écrire une requête en utilisant des variables. Voici mon codeRequête SQL n'entrant pas la valeur de ma variable

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)" 

Il ne semble pas passer correctement les variables dans la requête et je ne sais pas où je vais mal

des idées?

+0

Pouvez-vous fournir un peu plus de détails s'il vous plaît? Où les variables ne sont-elles pas transmises correctement? –

+0

Supprime les guillemets autour du @ linkedserver2 dans la dernière affectation de PasswordCheck. Vous n'en avez pas besoin car VARCHAR est dans une variable. –

Répondre

3

Quel est le problème que vous voyez en particulier? Plus d'info aiderait.

Ce que je peux dire, est que vous êtes le code se traduit par une longue ligne de SQL (en remplaçant « 69836 » pour bondnumber)

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) 

Je parie que si vous exécutez que dans une fenêtre de requête, il va échouer. Essayez d'ajouter ; à la fin de chaque instruction logique.

Avez-vous pensé juste faire ce code une procédure stockée et passer params à cela? Un code comme celui-ci est assez dangereux (SQL Injection), difficile à lire, et juste un peu moche en général.

échantillon stocké Code de procédure:

CREATE PROCEDURE dbo.usp_MyStoredProcedure 
     @Param1 INT = NULL 
AS 

SELECT * FROM MyTable Where Col1 = @Param1 
+0

@James Wiseman Comment puis-je en faire une procédure stockée? –

+0

@Jamie Taylor - Question vraiment basique, j'ai peur. J'ai inclus un exemple de code de procédure stockée, mais je vous suggère de lire sur eux. Bonne chance –

+0

Vous pourriez également envisager de casser la requête un peu si vous n'utilisez pas un proc stocké. Vous pouvez toujours bénéficier de l'utilisation de requêtes paramétrées, même lorsque vous le faites en ligne dans votre code asp.net. –

0

@Jamie - Eh bien je tends personnellement à trouver est beaucoup plus clair pour casser des choses une partie un peu, bien que ce ne est pas techniquement nécessaire. Je dis juste pour construire vos variables de paramètre séparément et ensuite les ajouter comme paramétré (quelque chose comme le suivant):

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) 
Questions connexes