2017-03-03 22 views
0

Ich habe eine Methode in der Klasse DataBase in App_Code, die ich verwendet, um eine gespeicherte Prozedur für die Anmeldung aufrufen, aber wenn ich den Anruf erhalte ich keinen Fehler, aber meine Anmeldung wird nicht abgeschlossen .So rufen Sie Stored Procedure von App_Code DataBase Klasse

Dies ist die Datenbank-Klasse:

public class DataBaseClass 
{ 
    SqlDataAdapter da; 
    SqlConnection con = new SqlConnection(); 
    SqlCommand cmd = new SqlCommand(); 
    DataSet ds = new DataSet(); 
    DataTable dt = new DataTable(); 

    public DataBaseClass() 
    { 


    } 

    public DataTable CallSP(string UserName, string Password) 
    { 
     con = new SqlConnection(@"Data Source=MyServer;Initial Catalog=MyDataBase;Integrated Security=True"); 
     con.Open(); 
     cmd = new SqlCommand("LoginUser", con); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.Add("@UserName", SqlDbType.NVarChar, 20).Value = "UserName"; 
     cmd.Parameters.Add("@Password", SqlDbType.NVarChar, 20).Value = "Password"; 
     da = new SqlDataAdapter(cmd); 
     da.Fill(dt); 
     cmd.ExecuteNonQuery(); 
     cmd.Dispose(); 
     con.Close(); 
     return dt; 
    } 

Dies ist der Code, den ich für Anmeldung verwendet zu nennen:

 DataBaseClass dbClass = new DataBaseClass(); 
     dt = new DataTable(); 
     dt = dbClass.CallSP("UserName", "Password"); 

     if (dt.Rows.Count > 0) 
     { 
      boolReturnValue = true; 
      Session["UserId"] = dt.Rows[0]["Id"].ToString(); 
      string updateLastLogin = "Update [User] SET LastLogin='" + System.DateTime.Now.ToString() + "' where Id='" + Session["UserId"].ToString() + "'"; 
      dbClass.ConnectDataBaseToInsert(updateLastLogin); 
     } 
     return boolReturnValue; 
    } 

Dies ist mein Stored Procedure:

CREATE PROCEDURE [dbo].[LoginUser] (
@UserName nvarchar(20), 
@Password nvarchar(20) 
) 
AS 

SET NOCOUNT ON; 
(
SELECT * FROM [User] WHERE Email = @UserName AND Password = @Password 
) 

Kann jemand Reproduzieren Sie meinen Code und teilen Sie mir mit, warum mein Login-Anruf nicht funktioniert.

+0

Was ist Ihr Nachrichtenfehler? –

+0

Mit "Login wird nicht abgeschlossen", meinst du "dt.Rows.Count" ist Null? – Crowcoder

+0

Sie codieren die Literalzeichenfolgen "Username" und "Password". Ich nehme an, Sie beabsichtigen dort eine Variable zu verwenden? – Crowcoder

Antwort

1

versuchen Sie die folgenden Änderungen in der CallSP Methode:

cmd.Parameters.Add("@UserName", SqlDbType.NVarChar, 20).Value = UserName; 
    cmd.Parameters.Add("@Password", SqlDbType.NVarChar, 20).Value = Password; 

nun mehr Aufmerksamkeit in Ihrem Code appling ich sah, dass Ihre Parameter um Zitate sind, so wurden Sie die Zeichenketten „Username“ vorbei und "Passwort" stattdessen die Werte.

Mit diesen Änderungen übergeben Sie die Werte aus Ihren Parametern.

Sorry von meinen Fehlern.

Ich hoffe, es kann Ihnen helfen.

+0

@Crowcoder Ich habe den Kommentar behoben, aber ich stimme nur nicht überein, rufen Sie die Verfügung, die Fill-Methode macht es nicht automatisch? Wie Sie in [Reference Source Fill-Methode] sehen können (https://referencesource.microsoft.com/#System.Data/System/Data/Common/DbDataAdapter.cs,76ee69e4b70c4d1f) –

+0

Sieht für mich so aus, wie es nur den Leser das disponiert wird verwendet, um zu füllen. DataAdapters sind auch Einweg - mein Punkt ist diese Klasse ist sehr undicht. Es sollte IDisposable implementieren und alle Ressourcen freigeben oder sie nicht als Felder verwenden und stattdessen alle in "using" -Blöcke in der Methode einfügen. – Crowcoder

+0

Crowcoder, können Sie Beispiel für Ihre Idee mit dem obigen Code zeigen. –