Problème de remplissage de la table de données avec SQL carte ASP.NET
J'ai un nom d'utilisateur de la table db que j'essaie de connecter de façon à comparer le nom d'utilisateur/pass.
Voici mon code, ça ne fonctionne pas, ce que je fais mal?
DataTable dt = null;
protected void btn_Click_Login(object sender, EventArgs e)
{
string query = string.Format("SELECT * FROM Users WHERE Username='{0}' AND Password='{1}'", txtUsername.Text, txtPassword.Text);
using (SqlConnection c = new SqlConnection(ConfigurationManager.ConnectionStrings["RBConnectionString"].ConnectionString))
{
c.Open();
using (SqlDataAdapter a = new SqlDataAdapter(query, c))
{
DataTable t = new DataTable();
a.Fill(t);
}
}
if (dt.Rows.Count > 0)
{
Session["Username"] = txtUsername.Text;
Session["Password"] = txtPassword.Text;
Response.Redirect("main.aspx");
lblError.Text = "success";
}
else
{
lblError.Text = "Wrong Username/Password combination";
}
}
}
- Quand vous dites que ça ne marche pas, dans quel sens? Ne vous obtenez une erreur? Comme une question de côté (mais importante), vous êtes vous-même ouverture à l'injection SQL par la construction de la SQL de manière dynamique comme ça. Vous devez utiliser SQL paramétré à la place.
- Je suis une référence nulle exception lorsque vous essayez de compter les lignes dans la table de données. Le débogueur dit: la référence d'Objet n'est pas définie à une instance d'un objet.
Vous devez vous connecter pour publier un commentaire.
probablement vous utilisez mal datatable pour vérifier l'absence de lignes retournées.
Vérifier les t et dt instances de la datatable.
Essayez de créer un SqlCommand pour tenir votre requête.
Je ne suis pas sûr à 100% que c'est votre problème, mais à l'époque où j'ai l'habitude d'utiliser ADO.NET (avant L2SQL/EF, jours sombres en effet), je crois me souvenir d'un problème avec la DataTable et SqlDataAdapter.
De ce que j'ai rappelez - vous que vous ne pouvez pas remplir une DataTable avec un SqlDataAdapter basé sur une crue de la chaîne de requête - vous besoin d'utiliser SqlCommand. Mais je crois que cela peut être accompli avec un jeu de données.
Donc soit changer de SqlCommand, ou le changement de jeu de données.
Vous remplissez
t
:mais lire
dt
:J'ai décidé d'essayer le lecteur de données et il a obtenu de travail:
Quelle est l'erreur que vous obtenez n'est pas clair. Mais j'ai l'impression que votre connexion est ouverte et n'est jamais fermée. Essayez
c.Close();