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.
InformationsquelleAutor Richard Cane | 2012-11-08
Schreibe einen Kommentar