L'obtention de la requête pour l'utiliser avec le paramètre et “like”
J'ai vu beaucoup de questions concernant l'utilisation de paramètres avec des requêtes Sql et des "j'aime", mais j'ai essayé tous les moyens que j'ai vu de ce code et ne peut toujours pas obtenir ma requête à donner des résultats. Si je mets une valeur dans la requête elle-même, il fonctionne très bien. Quand je lance la première requête énumérés je reçois le message d'erreur "Doit déclarer la variable scalaire "@de Recherche" mais je croyais que je l'ai fait avec le cmd.Les paramètres.AddWithValue déclaration. N'importe qui peut voir ce que je fais de mal? Toute aide est appréciée.
//Declare the connection object
SqlConnection Conn = new SqlConnection();
Conn.ConnectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;
//Connect to the db
Conn.Open();
//Define query
//This query doesn't work
string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE (State LIKE '%' + @Search + '%')";
//This query doesn't work either
string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE State LIKE @Search";
//This query works
string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE State LIKE 'MI'";
//Declare the Command
SqlCommand cmd = new SqlCommand(sql, Conn);
//Add the parameters needed for the SQL query
cmd.Parameters.AddWithValue("@Search", "%" + txtSearch.Text + "%");
//Declare a SQL Adapter
SqlDataAdapter da = new SqlDataAdapter(sql, Conn);
//Declare a DataTable
DataTable dt = new DataTable();
//Populate the DataTable
da.Fill(dt);
//Bind the Listview
lv.DataSource = dt;
lv.DataBind();
dt.Dispose();
da.Dispose();
Conn.Close();
- stackoverflow.com/questions/251276/...
- La base de données que vous utilisez?
- C'est SQL Server.
- Ce que l'exception en êtes-vous? Comme quoi le message d'erreur dit?
Vous devez vous connecter pour publier un commentaire.
Dans votre code ci-dessus, vous n'êtes pas en utilisant le paramètre dans le SqlDataAdapter, dans le code ci-dessous, vous pourrez utiliser la SqlDataAdapter dans la commande.
Si vous ne souhaitez pas utiliser une requête paramétrée cela fonctionne :
string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer WHERE (State LIKE '% + @Search + %')";
aveccmd.Parameters.AddWithValue("@Search", txtSearch.Text);
et toujours pas de résultats. Permettez-moi de demander à ceci: y Aurait-il une différence si je suis en utilisant un Panneau de mise à Jour? Je n'ai jamais utilisé un avant aujourd'hui et je suis juste apprendre à ce sujet. Toutefois, la requête où j'ai mis la valeur dans fonctionne bien.SqlCommand
objet, d'où l'origine de la surcharge doit toujours fonctionner de toute façon.Votre principal problème est que vous n'êtes pas à l'aide de la commande que vous avez construit à cause de ce constructeur
donc vous n'êtes pas à l'aide du paramètre et la seule requête qui fonctionne est celui qui n'utilise pas du tout (troisième). Vous devez utiliser ce constructeur au lieu (le seul qui est créé à l'aide de
SqlCommand
)Après vous modifiez le constructeur vous utilisez, que ce soit des requêtes suivantes s'appliquent:
ou ceci:
cela devrait fonctionner
En outre accepté de répondre, n'oubliez pas de remplacer votre _, % par des crochets. Sinon il va encore donner de mauvais résultats.
Plutôt que d'utiliser un SqlDataAdapter vous pouvez utiliser un SqlDataReader
Vous remarquerez dans votre code, que le paramater est attaché à cmd qui n'est pas réellement utilisé et donc le SqlDataAdapter ne connais pas le paramètre.