2016-06-16 13 views
-1

ich von meinem SQL auswählen möchten und eine Sitzung von einem Tabellenfeld erstellenwie SQL und verwenden in asp.net

string strquery = "select * from Registration where [email protected] "; 
SqlConnection connection2 = DBConnection.getConnection(); 
connection2.Open(); 
SqlCommand cmd2 = new SqlCommand(); 
cmd2.Connection = connection; 
cmd2.CommandText = strquery; 
cmd2.Parameters.Add("@username", txt1_username.Text); 

SqlDataReader nwReader = cmd2.ExecuteReader(); 
string cus = ""; 
if (nwReader.Read()) 
{ 
    cus = nwReader["customer_id"].ToString(); 
} 
nwReader.Close(); 

connection.Close(); 
Session["customer_id_se"] = cus.ToString(); 
Response.Redirect("Wedding.aspx");   

mein Problem ist: Ich kann nicht das Feld und verwenden in der Sitzung

verwenden können
+0

Sie erstellen 'connection2' und öffnen' connection', was ist dann für 'connection2' in diesem Block? –

+0

Überprüfen Sie SqlConnection-Objekt ... Spielen Sie mit MySQL-Datenbank über SqlConnection? – Sami

+0

@Sami: Was lässt dich daran denken? –

Antwort

1

Sie machen einige Fehler, lassen Sie mich sie zuerst zeigen (offensichtlich wird es das Problem auch lösen).

  1. Wie ich im Kommentar erwähnt: „Sie connection2 und Öffnung schaffen connectionconnection.Open(); Verwendung sollte entweder connection2.Open(); oder entfernen connection2 aus dem Block.
  2. Die .Parameters.Add() Methode erwartet SqlDbType sie angeben, und fügen Sie sein Wert unter Verwendung der folgenden Anweisung:

    cmd2.Parameters.Add("@username",SqlDbType.VarChar).Value = txt1_username.Text; 
    
  3. Es kann Situationen geben, in denen nwReader keine Zeilen enthält (die Abfrage gibt kein Ergebnis zurück). Wenn Sie in einer solchen Situation auf den Wert zugreifen, erhalten Sie die Ausnahme "Invalid attempt to read when no data is present". Sie müssen daher vor dem Zugriff auf die Existenz von Daten im Reader prüfen.

Das heißt Sie wie folgt verwendet werden soll:

SqlDataReader nwReader = cmd2.ExecuteReader(); 
string customerId = String.Empty; 
if (nwReader.HasRows) 
{ 
    customerId = nwReader["customer_id"].ToString(); 
} 

4. customerId ist bereits ein String, so dass Sie nicht brauchen, um es zu konvertieren wieder .ToString() verwenden, bevor zu der Sitzung zugewiesen wird. So kann das komplette Szenario wie folgt codiert werden:

string strquery = "select * from Registration where [email protected]"; 
SqlConnection connection = DBConnection.getConnection(); 
connection.Open(); 
SqlCommand cmd2 = new SqlCommand(); 
cmd2.Connection = connection; 
cmd2.CommandText = strquery; 
cmd2.Parameters.Add("@username", SqlDbType.VarChar).Value = txt1_username.Text; 

SqlDataReader nwReader = cmd2.ExecuteReader(); 
string customerID = ""; 
if (nwReader.HasRows) 
{ 
    customerID = nwReader["customer_id"].ToString(); 
} 
nwReader.Close(); 
connection.Close(); 
Session["customer_id_se"] = customerID; 

Hinweis: -

If nwReader.HasRows is false means there is no such record for the specific username, in this case customerID and hence Session["customer_id_se"] will be blank.

Updates per HansKesting der Kommentar,

Select * die gesamte holen wird Zeilen, die die Bedingung in der Where-Klausel erfüllen. Wenn Sie nur einen einzigen Wert benötigen und sicher sind, dass das Ergebnis entweder leer oder ein einzelner Wert ist, können Sie SELECT column_name from ... verwenden und in solchen Situationen ExecuteScalar verwenden, um den Wert zu erhalten.

+0

Sitzung ist leer kann nicht in einer anderen Seite verwendet werden – Ahmed

+0

@haik_khosrovian: was bedeutet, dass es keinen solchen Datensatz für den spezifischen Benutzernamen gibt –

+0

Eine weitere Optimierung: Wenn es ein einzelner Wert ist, wählen Sie * das * (anstelle von '*') und benutze 'ExecuteScalar', um genau das zu bekommen. –