-2
votes

Sélectionnez et comptez le nombre de lignes

Désolé, j'apprends juste C #. Je suis habitué à HTML / PHP puis à la programmation réelle.

Je cherche à utiliser SQL SELECT pour afficher les données à partir du résultat de la recherche, mais il est probable qu'en raison de plusieurs LIKE, il puisse apporter plusieurs lignes (ce que je veux), mais s'il apporte plusieurs lignes au lieu de sélectionner la première ligne à afficher, je veux un IF message indiquant qu'il y a plus d'une ligne correspondant aux critères. Voici mon code actuel (j'en ai supprimé du code après si (recordfound) pour raccourcir le code de cette question)

SqlConnection con1 = new SqlConnection(@Settings.Default.database);
con1.Open();
string qu = "SELECT * FROM addresses WHERE road LIKE '%" + inclocroad.Text.Trim() + "%' OR postcode LIKE '%" + inclocroad.Text.Trim() + "%' OR full_address LIKE '%" + inclocroad.Text.Trim() + "%' OR Property LIKE '%" + inclocno.Text.Trim() + "%' OR full_address2 LIKE '%" + inclocroad.Text.Trim() + "%' ";
SqlCommand cmd1 = new SqlCommand(qu, con1);
SqlDataReader dr = cmd1.ExecuteReader();
bool recordfound = dr.Read();
if (recordfound)
{
    //Displays data from row
} 
else
{
    messagebox.show("No data found");
}

Exemple

L'utilisateur clique sur le bouton

SQL utilise SELECT QUERY où l'utilisateur a écrit le résultat de la recherche

IF SELECT QUERY a plus d'une ligne, puis affiche la boîte de message

Sinon, affichez la seule ligne correspondant au résultat de la recherche.


4 commentaires

Soyez conscient des injections SQL .


Merci pour le conseil. Je suis au courant des injections SQL, mais j'ai une prévention avec un serveur vérifiant chaque chose que quelqu'un fait et le renvoyant de l'application si une injection SQL est détectée, ce qui fonctionne bien. C'est de toute façon une application privée donc je ne suis pas vraiment dérangé par ça.


Ma zone de texte n'autorise rien d'autre que du texte et des chiffres.


au lieu d'utiliser DataTables, je préfère traiter des objets, un simple ORM peut faire l'affaire. Comme Dapper, de nos amis ici à stackoverflow stackexchange.github.io/Dapper


3 Réponses :


1
votes

Vous pouvez l'utiliser si vous espérez charger des données à l'aide de DataTable.

    SqlCommand cmd1 = new SqlCommand(qu, con1);
    SqlDataReader dr = cmd1.ExecuteReader();
    bool recordfound = dr.Read();

    DataTable dt = new DataTable();
    if (recordfound)
    {
         dt.Load(reader);
    } 
    
    int numRows= dt.Rows.Count;
    if(numRows > 1){
        messagebox.show("Data found"+ numRows);
    }
    else
    {
        messagebox.show("No data found");
    }


0 commentaires

1
votes

Eh bien, pourquoi ne pas les compter:

SELECT COUNT(1) ...

Puisque nous ne parlons que de quelques lignes, cela ne nuit ni aux performances ni à quoi que ce soit.


0 commentaires

0
votes

C'est si simple ... J'avais juste un moment.

J'ai fait deux SQL avec une requête IF si elle contenait plus de résultats ou non. Le premier SQL étant un COUNT utilisant ExecuteScalar plutôt qu'une instruction IF s'il contenait plus d'un enregistrement.

Merci pour l'aide.


0 commentaires