Sie machen einige Fehler, lassen Sie mich sie zuerst zeigen (offensichtlich wird es das Problem auch lösen).
- Wie ich im Kommentar erwähnt: „Sie
connection2
und Öffnung schaffen connection
connection.Open();
Verwendung sollte entweder connection2.Open();
oder entfernen connection2
aus dem Block.
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;
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.
Sie erstellen 'connection2' und öffnen' connection', was ist dann für 'connection2' in diesem Block? –
Überprüfen Sie SqlConnection-Objekt ... Spielen Sie mit MySQL-Datenbank über SqlConnection? – Sami
@Sami: Was lässt dich daran denken? –