C # și SQL SELECT

În prezent, lucrez la un proiect referitor la C# și SQL și am o problemă cu privire la funcția SELECT și nu găsesc soluții on-line.

Scenariul vizează interogarea căutării de la C# prin serverul SQL și afișarea rezultatelor într-o vizualizare Grid de date la C #.

Folosesc Visual Studio 2008 și SQL Server Studio 2008.

Înainte de a începe proiectul, am făcut un formular Windows rapid din Visual studio și tocmai am făcut o vizualizare de tip datagrid, două casete de text și un buton de căutare.

La SQL Server am o bază de date cu un tabel DVD și vreau să caut, din acest formular Windows cu ID-ul DVD și Nume.

Am inceput cu ID-ul DVD si am implementat acest cod:

private void btnView_Click(object sender, EventArgs e)
{
   SqlConnection c = new SqlConnection(@"Data Source=GILBERTB-PC\SQLEXPRESS;Initial Catalog=DVDandGameBooking;Integrated Security=True"); 

   DataTable t = new DataTable();

   string sqlString = "SELECT * From DVD where Id ='" + txtID.Text+ "'";

   SqlDataAdapter dt = new SqlDataAdapter(sqlString, c);        
   dt.Fill(t);

   dtgv1.DataSource = t;
}

și a funcționat :)

Apoi am schimbat codul

string sqlString = "SELECT * From DVD where Name ='" + txtName.Text+ "'";

astfel încât să pot căuta cu numele DVD-ului dar atunci când am pornit programul și am căutat cu numele pe care tocmai la afișat o bază de date necompletată

De asemenea, există vreo modalitate prin care să pot schimba codul, astfel încât să pot căuta cu ID-ul sau cu numele?

Vă mulțumim pentru ajutor și timp

1
user1427266, a terminat munca sau nu?
adăugat autor Pacane, sursa
Bobby Tables vă va deține.
adăugat autor Jeff Mercado, sursa
Ați încercat să executați același script în SQL pentru a vedea ce a fost returnat?
adăugat autor CD Smith, sursa
Îmi place Bobby Tables!
adăugat autor CD Smith, sursa

2 răspunsuri

Sau puteți utiliza SQLCommand cu parametri de genul:

SqlConnection c = new SqlConnection(@"Data Source=GILBERTB-PC\SQLEXPRESS;Initial Catalog=DVDandGameBooking;Integrated Security=True");
string queryString = "SELECT * From DVD where Id = @id";
var paramId = new SqlParameter("id", SqlDbType.VarChar);
var query = new SqlCommand(queryString, c);
query.Parameters.Add(paramId);

Dacă într-adevăr doriți să utilizați un SQLDataAdapter, puteți seta comanda selectați la cea pe care am scris-o mai sus. În caz contrar, puteți utiliza un cititor de date și repetați rezultatele.

De asemenea, utilizarea parametrilor ca aceasta face ca interogarea dvs. să fie mai ușor de citit și o face mai sigură pentru injecțiile SQL. Ar trebui să fie întotdeauna luate în considerare.

Modificați1: Dacă doriți să căutați cu Id sau Nume, puteți face doar 2 parametri și puneți un OR între 2 și poate utilizați ca în loc de = în interogarea dvs. Dacă valorile pot fi null , poate doriți să construiți dinamic interogarea, în funcție de valorile care nu sunt null .

2
adăugat
Nu ați putea - ar trebui să ! +1
adăugat autor marc_s, sursa

Gânduri:

  1. Asigurați-vă că txtName.Text are o valoare
  2. Încercați selectarea SQL utilizând Enterprise Manager, Toad sau alt instrument de interogare. Ce obții?
  3. Încercați să utilizați LIKE ca exemplu de mai jos
  4. Cazul cel mai rău, poate verificați colaționarea pentru masă, probabil setarea sa la potrivirea textului "sensibil la caz".

Atât ID-ul, cât și numele:

SELECT * FROM DVD
      WHERE Id=[ID Value]
      OR Name LIKE '%[Name Value]%'
2
adăugat