2010-11-02 6 views
0

J'ai récemment essayé de trouver un moyen de faire fonctionner les requêtes paramétrées et je pense que je suis presque là mais que j'obtiens une erreur lors de l'exécution de ma requêteRequête paramétrée - erreur lors de l'exécution d'une requête

est ici le code

Dim LogData2 As sterm.MarkData = New sterm.MarkData() 

Dim query As String = ("Select * from openquery (db, 'SELECT * FROM table WHERE [email protected]')") 

Dim cmd As New SqlCommand(query) 
cmd.Parameters.AddWithValue("@investor", 34) 

Dim drCode2a As DataSet = LogData2.StermQ3(query) 

Je l'ai débogués et il ne semble pas être mettre le paramètre dans la requête.

"Select * from openquery (db, 'SELECT * FROM table WHERE [email protected]')" 

C'est ce que je reçois quand je déboguer la ligne Dim drCode2a As DataSet = LogData2.StermQ3(query)

Toutes les idées ce que je fais mal?

SOLUTION

Voici comment je résolu mon problème

Dim conn As SqlConnection = New SqlConnection("server='h'; user id='w'; password='w'; database='w'; pooling='false'") 

conn.Open() 

Dim query As New SqlCommand("DECLARE @investor varchar(10), @sql varchar(1000) Select @investor = 69836 select @sql = 'SELECT * FROM OPENQUERY(db,''SELECT * FROM table WHERE investor = ''''' + @investor + ''''''')' EXEC(@sql)", conn) 

dgBookings.DataSource = query.ExecuteReader 
dgBookings.DataBind() 

Merci pour l'aide

Répondre

1

Ok Jamie taylor Je vais essayer de répondre à votre question.

Vous utilisez OpenQuery vous êtes probablement becuase utilisez un problème DB

liée Fondamentalement, la méthode est la OpenQuery prend une chaîne vous ne pouvez pas passer une variable dans le cadre de la chaîne que vous avez envoyé à OpenQuery.

Vous pouvez formater votre requête comme ceci à la place. La notation suit servername.databasename.schemaname.tablename. Si vous utilisez un serveur lié via odbc puis omettre databasename et schemaname, comme illustré ci-dessous

Dim conn As SqlConnection = New SqlConnection("your SQL Connection String") 
    Dim cmd As SqlCommand = conn.CreateCommand() 
    cmd.CommandText = "Select * db...table where investor = @investor" 
    Dim parameter As SqlParameter = cmd.CreateParameter() 
    parameter.DbType = SqlDbType.Int 
    parameter.ParameterName = "@investor" 
    parameter.Direction = ParameterDirection.Input 
    parameter.Value = 34 
+0

Je l'ai fait, mais sans '...' 'et je reçois doivent déclarer @ investor' et si je fais avec le '...' alors je reçois le préfixe de colonne invitée –

+0

@Jamie Taylor Jetez un oeil à la modification que j'ai faite –

+0

Je reçois maintenant 'L'accès de propriété doit affecter à la propriété ou utiliser sa valeur.' –

Questions connexes