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<Person>
.
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;
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
{
}
}
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;
}