Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - Fehler mit SQL Verbindung


traceurmicha - Sa 08.08.09 19:49
Titel: Fehler mit SQL Verbindung
Ich will grad n bissl was proggen zum üben und bekomme auf einmal diese Fehlermeldung:
ExecuteReader: CommandText-Eigenschaft wurde nicht initialisiert.

Leider kann ich damit nix anfangen, könnt ihr mir helfen? Hier mein Quellcode:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
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;

public partial class _Default : System.Web.UI.Page 
{
    string Login_Pass,
           Login_Name,
           search_id_name,
           search_id_pass;

    SqlConnection log_con = new SqlConnection();
    SqlCommand log_com;

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    public void Login(object sender, EventArgs e)
    {
        log_con.ConnectionString = "Data Source=PEDRO-PC\\SQLEXPRESS;Initial Catalog=Login;Integrated Security=True";
        log_con.Open();
        
        if (u_name.Text != "")
        {
            search_id_name = "SELECT id AS 'id' FROM User_Name WHERE Name = '" + u_name.Text +"'";
            Label1.Text = "Name";
            log_com = new SqlCommand(search_id_name, log_con);
            SqlDataReader dr_log_nam = log_com.ExecuteReader();
            while (dr_log_nam.Read())
            {
                lb_remind1.Items.Add(dr_log_nam["id"].ToString());
            }
            dr_log_nam.Close();
        }
        else
            Label1.Text = "Bitte Usernamen angeben!";

        if (u_pass.Text != "")
        {
            Login_Pass = "SELECT id AS 'id' FROM User_Pass WHERE Pass = '" + u_pass.Text + "'";
            Label2.Text = "Passwort";
            log_com = new SqlCommand(search_id_pass, log_con);
            SqlDataReader dr_log_pass = log_com.ExecuteReader();
            while (dr_log_pass.Read())
            {
                lb_remind2.Items.Add(dr_log_pass["id"].ToString());
            }
            dr_log_pass.Close();
        }
        else
            Label2.Text = "Bitte Passwort angeben!";

        lb_remind1.SelectedIndex = 0;
        lb_remind2.SelectedIndex = 0;
        Login_Name = lb_remind1.SelectedItem.Text;
        Login_Pass = lb_remind2.SelectedItem.Text;
        if (Login_Name == Login_Pass)
            Header.Text = "Hat geklappt!";
    }

}


Der Fehler wird angezeigt bei SqlDataReader dr_log_pass = log_com.ExecuteReader(); in der zeile 49


Moderiert von user profile iconKha: Topic aus ASP.NET und Web verschoben am Sa 08.08.2009 um 20:00


Kha - Sa 08.08.09 20:00

Du solltest dir angewöhnen, Variablen erst dort zu deklarieren, wo du sie brauchst, und erst recht nicht als Klassenvariablen zu deklarieren, wenn du sie nur innerhalb einer Methode brauchst. Dann wäre dir dieser Fehler nicht passiert:

C#-Quelltext
1:
2:
3:
            Login_Pass = "SELECT id AS 'id' FROM User_Pass WHERE Pass = '" + u_pass.Text + "'";
            Label2.Text = "Passwort";
            log_com = new SqlCommand(search_id_pass, log_con);


traceurmicha - Sa 08.08.09 20:10

Oh man... ok dankeschön!
Mal wieder son geiler Fehler...


JüTho - So 09.08.09 10:44

... Außerdem sollte es verboten werden, einen Sql-Befehl als String-Verknüpfung zu erzeugen. Das führt bei vielen Datentypen zu (teilweise unerklärlichen) Konvertierungsproblemen, bei Strings zu Problemen mit Hochkommata und generell zur Gefahr von Sql-Injection [http://de.wikipedia.org/wiki/SQL-Injection]. Alternativen findest du unter [Artikelserie] Parameter von SQL Befehlen [http://www.mycsharp.de/wbb2/thread.php?threadid=66704].

Jürgen