SQLDataSource-Insert-Methode funktioniert nicht im CodeBehind .NET C#
Schreibe ich eine ASP-web-Projekt für einen Abschluss Modul und ich habe zum einfügen von einigen login-Daten in eine login-Tabelle. Es war in Ordnung arbeiten, während ich es hatte ausgeführt, wie ein Skript im .aspx-Datei, aber ich brauchte einen hash des Passworts damit, nicht zu wissen, einen Weg, es zu tun außerhalb der Code-Behind-Datei, die ich verschoben das SQLDataSource. Dies ist das einfügen, was nicht funktioniert.
SqlDataSource sqldsInsertPassword = new SqlDataSource();
sqldsInsertPassword.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
sqldsInsertPassword.ProviderName = ConfigurationManager.ConnectionStrings["ConnectionString"].ProviderName;
sqldsInsertPassword.InsertCommand = "INSERT INTO login (Password, Email) VALUES (@Password, @Email)";
sqldsInsertPassword.InsertCommandType = SqlDataSourceCommandType.Text;
sqldsInsertPassword.InsertParameters.Add("@Email", txtEmail.Text.ToString().ToLower());
sqldsInsertPassword.InsertParameters.Add("@Password", Convert.ToBase64String(getSHA256(txtPassword.Text.ToString())));
sqldsInsertPassword.Insert();
Sehe ich nicht, was ist falsch mit, dass, aber vielleicht kann man sagen, vom rest der Klasse.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data.Sql;
using System.Web.Security;
using System.Configuration;
using System.Security.Cryptography;
using System.Text;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
public static byte[] getSHA256(string password)
{
SHA256CryptoServiceProvider sha = new SHA256CryptoServiceProvider();
return sha.ComputeHash(System.Text.Encoding.ASCII.GetBytes(password));
}
protected void btnRegister_Click(object sender, EventArgs e)
{//check email, insert user, SQL command get user ID, insert password
SqlDataReader drExistingUsers = (SqlDataReader)sqldsCheckEmail.Select(DataSourceSelectArguments.Empty);
drExistingUsers.Read();
if (drExistingUsers.HasRows == false)
{
drExistingUsers.Close();
bool fault = false;
try
{
sqldsInsertUser.Insert();
}
catch (Exception error)
{
fault = true;
lblError.Text = "Error: " + error;
}
if (fault == false)
{
try
{
SqlDataSource sqldsInsertPassword = new SqlDataSource();
sqldsInsertPassword.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
sqldsInsertPassword.ProviderName = ConfigurationManager.ConnectionStrings["ConnectionString"].ProviderName;
sqldsInsertPassword.InsertCommand = "INSERT INTO login (Password, Email) VALUES (@Password, @Email)";
sqldsInsertPassword.InsertCommandType = SqlDataSourceCommandType.Text;
sqldsInsertPassword.InsertParameters.Add("@Email", txtEmail.Text.ToString().ToLower());
sqldsInsertPassword.InsertParameters.Add("@Password", Convert.ToBase64String(getSHA256(txtPassword.Text.ToString())));
sqldsInsertPassword.Insert();
}
catch (Exception insertError)
{
fault = true;
lblError.Text = "Error: " + insertError;
}
if (fault == false)
Response.Redirect("Login.aspx");
}
}
else
lblError.Text = "Email already exists.";
}
Ich Schätze, es gibt eine Menge von namespaces, brauche ich vielleicht nicht, aber ich werde ordentlich bis später.
Danke an die, die Antworten!
- Bekommst du eine Fehlermeldung oder passiert nichts, überhaupt?
- Wird eine exception geworfen? Was bedeutet es zu sagen? Oder es funktioniert einfach nicht bei allen?
- Bitte legen Sie den stack-trace deiner exception in dieser Frage. Oder, wenn es nicht eine Ausnahme werfen, was ist das problem? Tut es nur die Ausgabe, die falsche Sache?
- Es scheitert der Versuch beim einfügen von Passwort, ich bin mir nicht sicher, wie die Ausgabe SQLDataSource-Einfügen-Fehler in den Fang. Wenn jemand kommentieren wie das geht, kann ich nach etwas mehr spezifisch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Okay ich fest, dass es irgendeine Art von Problem mit der Formatierung der Parameter einfügen gibt. Im Grunde habe ich neu formatiert meine SQLDataSource in der .aspx-Datei, die so Aussehen wie,
Danach änderte ich den code in der Code Hinter dieser;
Und jetzt funktioniert es. Ich weiß nicht, ob der alte Code Behind Methode zum einfügen von Parametern würde gearbeitet haben, aber ich werde nicht versuchen.
Drop das @ ein und es wird klappen: