C# 如何使用C在Access数据库中进行搜索?
我不知道我是否做对了,我想要帮助。我需要查询txbCnpj.Text的n_tp记录 我的权限 我的代码c老实说我不知道怎么办C# 如何使用C在Access数据库中进行搜索?,c#,ms-access,C#,Ms Access,我不知道我是否做对了,我想要帮助。我需要查询txbCnpj.Text的n_tp记录 我的权限 我的代码c老实说我不知道怎么办 private void button1_Click_1(object sender, EventArgs e) { string strsql, strconc; OleDbCommand objCommand = null; OleDbConnection objConnect = null; s
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);
}
您的代码大部分看起来是正确的。我将通过应用最佳实践为您重构它
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;
}
我能解决这个问题
您需要提供参数值最佳做法可能是从提供缺少的参数开始。如果列位置发生变化,我不认为GetStringindex是最佳实践。因为它是由OP硬编码的,所以列位置是如何变化的?我个人使用命名参数,但在这里我没有看到任何缺点。无论如何,我改变了命名。参数仍然是最重要的部分。我个人使用命名参数这意味着什么?OleDB不使用命名参数,至少不是这样。但是您的代码完全缺少参数值。。。从reg_tp开始,其中n_tp=??=参数的占位符对于第一个问题,我没有看到OP使用了参数。对于命名参数部分,我并没有特别提到OleDb。我修正了我的代码,希望它能帮助你
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();