Wie kann man Daten aus einer SQL Server-Datenbank in C# abrufen?

Ich habe eine Datenbanktabelle mit 3 Spalten Vorname, Nachname und Alter. In meiner C#-Windows-Anwendung habe ich 3 Textfelder mit dem Namen "textbox1"... Ich habe meine Verbindung zu meinem SQL Server mit diesem Code hergestellt:

SqlConnection con = new SqlConnection("Data Source = .;
                                       Initial Catalog = domain;
                                       Integrated Security = True");
con.Open();
SqlCommand cmd = new SqlCommand("Select * from tablename", con);

Ich möchte Werte aus meiner Datenbank abrufen; wenn ich einen Wert in textbox1 eingebe, muss er mit den Werten in der Datenbank übereinstimmen und andere Details zu den entsprechenden Textboxen abrufen.

Ich habe diese Methode ausprobiert, aber sie funktioniert nicht:

cmd.CommandText = "select * from tablename where firstname = '" + textBox1.Text + "' ";

Wie kann ich alle anderen Werte in den Textfeldern abrufen?

 public Person SomeMethod(string fName)
        {
            var con = ConfigurationManager.ConnectionStrings["Yourconnection"].ToString();

            Person matchingPerson = new Person();
            using (SqlConnection myConnection = new SqlConnection(con))
            {
                string oString = "Select * from Employees where FirstName=@fName";
                SqlCommand oCmd = new SqlCommand(oString, myConnection);
                oCmd.Parameters.AddWithValue("@Fname", fName);           
                myConnection.Open();
                using (SqlDataReader oReader = oCmd.ExecuteReader())
                {
                    while (oReader.Read())
                    {    
                        matchingPerson.firstName = oReader["FirstName"].ToString();
                        matchingPerson.lastName = oReader["LastName"].ToString();                       
                    }

                    myConnection.Close();
                }               
            }
            return matchingPerson;
        }

Hier gibt es ein paar Dinge zu beachten: Ich habe eine parametrisierte Abfrage verwendet, die Ihren Code sicherer macht. Die Art und Weise, wie Sie die select-Anweisung mit dem Teil "where x = "+ Textbox.Text +"" erstellen, eröffnet Ihnen die Möglichkeit einer SQL-Injection.

Ich habe dies geändert in:

  "Select * from Employees where FirstName=@fName"
  oCmd.Parameters.AddWithValue("@fname", fName);  

Dieser Codeblock wird also Folgendes bewirken:

Er führt eine SQL-Anweisung in Ihrer Datenbank aus, um zu sehen, ob es Vornamen gibt, die mit dem von Ihnen angegebenen Namen übereinstimmen. Wenn dies der Fall ist, wird diese Person in einem Person-Objekt gespeichert (siehe unten in meiner Antwort für die Klasse). Wenn es keine Übereinstimmung gibt, sind die Eigenschaften des Person-Objekts "null".

Offensichtlich weiß ich nicht genau, was Sie zu tun versuchen, also gibt es ein paar Dinge zu beachten: Wenn es mehr als eine Person mit einem passenden Namen gibt, wird nur die letzte gespeichert und an Sie zurückgegeben. Wenn Sie diese Daten speichern möchten, können Sie sie in eine Liste einfügen.

Person Klasse hinzufügen, um es sauberer zu machen:

 public class Person
    {
            public string firstName { get; set; }
            public string lastName { get; set; }
    }

Jetzt rufen wir die Methode auf:

Person x = SomeMethod("John");

Sie können dann Ihre Textfelder mit Werten aus dem Person-Objekt wie folgt füllen:

txtLastName.Text = x.LastName;
Kommentare (5)

eine Klasse namens DbManager erstellen:

Class DbManager
{
 SqlConnection connection;
 SqlCommand command;

       public DbManager()
      {
        connection = new SqlConnection();
        connection.ConnectionString = @"Data Source=.     \SQLEXPRESS;AttachDbFilename=|DataDirectory|DatabaseName.mdf;Integrated Security=True;User Instance=True";
        command = new SqlCommand();
        command.Connection = connection;
        command.CommandType = CommandType.Text;
     } // constructor

 public bool GetUsersData(ref string lastname, ref string firstname, ref string age)
     {
        bool returnvalue = false;
        try
        {
            command.CommandText = "select * from TableName where firstname=@firstname and lastname=@lastname";
            command.Parameters.Add("firstname",SqlDbType.VarChar).Value = firstname;
 command.Parameters.Add("lastname",SqlDbType.VarChar).Value = lastname; 
            connection.Open();
            SqlDataReader reader= command.ExecuteReader();
            if (reader.HasRows)
            {
                while (reader.Read())
                {

                    lastname = reader.GetString(1);
                    firstname = reader.GetString(2);

                    age = reader.GetString(3);

                }
            }
            returnvalue = true;
        }
        catch
        { }
        finally
        {
            connection.Close();
        }
        return returnvalue;

    }

dann doppelklicken Sie auf die Abruf-Schaltfläche (z.B. btnretrieve) in Ihrem Formular und fügen den folgenden Code ein:

 private void btnretrieve_Click(object sender, EventArgs e)
    {
        try
        {
            string lastname = null;
            string firstname = null;
            string age = null;

            DbManager db = new DbManager();

            bool status = db.GetUsersData(ref surname, ref firstname, ref age);
                if (status)
                {
                txtlastname.Text = surname;
                txtfirstname.Text = firstname;
                txtAge.Text = age;       
               }
          }
       catch
          {

          }
   }
Kommentare (1)

Zum Abrufen von Daten aus der Datenbank:

private SqlConnection Conn;
 private void CreateConnection()
 {
    string ConnStr =
    ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
    Conn = new SqlConnection(ConnStr);
 }
 public DataTable getData()
 {
 CreateConnection();
    string SqlString = "SELECT * FROM TableName WHERE SomeID = @SomeID;";
    SqlDataAdapter sda = new SqlDataAdapter(SqlString, Conn);
    DataTable dt = new DataTable();
    try
    {
        Conn.Open();
        sda.Fill(dt);
    }
    catch (SqlException se)
    {
        DBErLog.DbServLog(se, se.ToString());
    }
    finally
    {
        Conn.Close();
    }
    return dt;
}
Kommentare (0)