Как сделать поиск в базе данных Access с помощью C #? - PullRequest
0 голосов
/ 26 января 2019

Я не знаю, правильно ли я делаю, мне нужна помощь. Мне нужно запросить "n_tp" записи для txbCnpj.Text.

Мой доступ

enter image description here

Мой код c # (Честно говоря, я не знаю, как это сделать)

private void button1_Click_1(object sender, EventArgs e)
    {
        string strsql, strconc;
        OleDbCommand objCommand = null;
        OleDbConnection objConnect = null;
        strconc = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\Program Files\\TPMicroVix\\reg_tp.accdb;";
        objConnect = new OleDbConnection(strconc);

        objConnect.Open();

        OleDbCommand Cmm = new OleDbCommand();

        Cmm.CommandText = "SELECT cnpj, nome_cl, portal, empresa, email, tel, canal, detalhes FROM reg_tp WHERE n_tp = ?;";
        Cmm.CommandType = CommandType.Text;
        Cmm.Connection = objConnect;

        OleDbDataReader DR;
        DR = Cmm.ExecuteReader();

        txbCnpj.Text = DR.GetString(0);
}

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Мне удалось решить

string strconc;

            OleDbConnection objConnect = null;
            strconc = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\Program Files\\TPMicroVix\\reg_tp.accdb;";
            objConnect = new OleDbConnection(strconc);

            objConnect.Open();



            OleDbCommand cmm = new OleDbCommand("SELECT cnpj, nome_cl, portal, empresa, email, tel, canal, detalhe FROM tb_tp WHERE n_tp = '" + txbTp.Text + "';", objConnect);


            cmm.Parameters.Add("@n_tp", OleDbType.VarChar).Value = txbTp.Text;


            cmm.CommandType = CommandType.Text;

            OleDbDataReader reader;
            reader = cmm.ExecuteReader();
            reader.Read();




            txbCnpj.Text = reader.GetString(0);
            txbNome.Text = reader.GetString(1);
            txbPortal.Text = reader.GetString(2);
            txbEmpresa.Text = reader.GetString(3);
            txbEmail.Text = reader.GetString(4);
            txbTel.Text = reader.GetString(5);
            cboCanal.Text = reader.GetString(6);
            txbDetalhe.Text = reader.GetString(7);


            objConnect.Close();
0 голосов
/ 26 января 2019

ваш код в основном выглядит правильно. Я просто собираюсь сделать рефакторинг для вас, применяя лучшие практики.

private void button1_Click_1(object sender, EventArgs e)
{
     var result = GetData();
     // do whatever with your data
}


private IList<ResultObject> GetData()
{
    IList<ResultObject> result = new List<ResultObject>();

    string strconc = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\Program Files\\TPMicroVix\\reg_tp.accdb;";
    using (OleDbConnection objConnect = new OleDbConnection(strconc))
    using (OleDbCommand Cmm = new OleDbCommand())
    {
        objConnect.Open();
        Cmm.CommandText = "SELECT cnpj, nome_cl, portal, empresa, email, tel, canal, detalhes FROM reg_tp WHERE n_tp = ?;";
        Cmm.Parameters.AddWithValue("tpParam", "somevalue");
        Cmm.CommandType = CommandType.Text;
        Cmm.Connection = objConnect;

        using (OleDbDataReader DR = Cmm.ExecuteReader())
        {
              ResultObject obj = new ResultObject
              {
                   Prop1 = DR.GetString("cnpj"),
                   Prop2 = DR.GetString("nome_cl"),
                   ....
              }
              result.Add(obj);
        }

    }

    return result;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...