Utilizarea parametrilor din serviciile de raportare MS (SQL Server 2008) împotriva unei surse de date ODBC

Am scris un raport în Visual Studio care ia un parametru de intrare utilizator și rulează împotriva unei surse de date ODBC. Aș dori să scriu manual interogarea și să aibă servicii de raportare să înlocuiască o parte din clauza cu valoarea parametrului înainte de a le trimite în baza de date. Ceea ce pare să se întâmple este faptul că @parmName pe care le presupun că va fi înlocuit este de fapt trimis ca parte a instrucțiunii SQL. Am pierdut o configurație undeva sau este pur și simplu imposibil?

Nu folosesc opțiunea de filtrare din instrument deoarece aceasta pare să aducă înapoi întregul set de date din baza de date și să facă filtrarea pe serverul SQL.

0
fr hi bn

4 răspunsuri

ODBC nu utilizează vechiul "?" sintaxa pentru parametrii? Incearca asta:

select col1, col2 from table1 where col3 = ?

Ordinea parametrilor dvs. devine importantă atunci, dar este mai puțin vulnerabilă la injecția SQL decât simpla adăugare a valorii parametrului.

0
adăugat

Sunt puțin confuz în legătură cu această întrebare, dacă căutați o utilizare simplă a parametrilor, atunci notația este: * paramName * , totuși dacă doriți să schimbați structura clauzei WHERE (așa cum ați putea folosi în sql + folosind?), atunci ar trebui să utilizați într-adevăr un cod personalizat în cadrul raportului pentru a defini o funcție care returnează sql-ul cerut pentru interogare.

Din păcate, atunci când se utilizează codul personalizat, parametrii nu pot fi menționați direct în interogarea generată, ci trebuie să aibă valori concatenate în Stringul rezultat, introducând astfel potențialul pentru injectarea SQL .

0
adăugat

Se pare că va trebui să tratezi declarația SQL ca o expresie. De exemplu:

="Select col1, col2 from table 1 Where col3 = " & Parameters!Param1.Value 

În cazul în care clauza unde este un șir, va trebui să faceți următoarele:

="Select col1, col2 from table 1 Where col3 = '" & Parameters!Param1.Value & "'"

Important: Nu folosiți linii de rupere în expresia SQL. Dacă faci, vei primi o eroare.

Holla înapoi dacă ai nevoie de mai multă asistență.

0
adăugat

A întâmpinat aceeași problemă încercând să interoghez o bază de date de acces prin ODBC.

Interogarea mea inițială: SELECT A.1 DE LA UN CU WHERE A.1 = @parametru a provocat eroare. Modificat la: SELECT A.1 DE LA UN A WHERE A.1 =? .

Apoi, trebuie să măriți parametrul interogării cu parametrul dvs. de raport.

0
adăugat