Como recuperar dados de uma base de dados do SQL Server em C#?

Eu tenho uma tabela de banco de dados com 3 colunas "primeiro nome", "último nome" e "idade". Na minha aplicação C# Windows tenho 3 caixas de texto chamadas textbox1... Eu fiz minha conectividade com o meu SQL Server usando este código:

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

I'gostaria de obter valores da minha base de dados; se eu der um valor na textbox1 tem que corresponder aos valores da base de dados e recuperar outros detalhes para as caixas de texto correspondentes.

Eu tentei este método mas ele's não está funcionando:

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

Como posso fazer para recuperar todos os outros valores para as caixas de texto?

 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;
        }

Poucas coisas para anotar aqui: Eu usei uma consulta parametrizada, o que torna o seu código mais seguro. A maneira como você está fazendo a instrução select com o "onde x = "+ Textbox.Text +"" part abre você para a injeção SQL.

I'mudei isto para:

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

Então o que este bloco de código vai fazer é:

Execute uma instrução SQL contra a sua base de dados, para ver se existe algum nome próprio que corresponda ao que você forneceu. Se esse for o caso, essa pessoa será armazenada em um objeto Person (veja abaixo na minha resposta para a classe). Se não houver correspondência, as propriedades do objeto Person serão `nulo'.

Obviamente eu não sei exatamente o que você está tentando fazer, então há algumas coisas para prestar atenção..: Quando houver mais de 1 pessoa com um nome correspondente, apenas a última será salva e devolvida a você. Se você quiser ser capaz de armazenar esses dados, você pode adicioná-los a uma List .

Classe de pessoas para torná-lo mais limpo:

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

Agora para chamar o método:

Person x = SomeMethod("John");

Você pode então preencher as suas caixas de texto com valores provenientes do objeto Pessoa assim:

txtLastName.Text = x.LastName;
Comentários (5)

criar uma classe chamada DbManager:

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;

    }

depois clique duas vezes no botão recuperar (por exemplo, btnretrieve) no seu formulário e insira o seguinte código:

 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
          {

          }
   }
Comentários (1)

Para recuperar dados da base de dados:

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;
}
Comentários (0)