基于访问数据库c#中的代码检索数据

本文关键字:代码 检索 数据 数据库 于访问 访问 | 更新日期: 2023-09-27 18:27:51

选择代码时,如何从数据库中检索数据?E.g:在我的数据库上,我得到了代码栏和描述栏。。对于Code列,我得到"0001",对于Description列,我获得"Abc",或者可以说"0001"的描述是"Abc)。

我已经试过很多次了,但一直失败,有人知道怎么回事吗?我想做的是,当用户选择"0001"时,"Abc"就会出现在描述栏中

这是代码:

string connectionString = (@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='Archives'Projects'Program'Sell System'Sell System'App_Data'db1.accdb;Persist Security Info=False;");
int y = 16;
UpdateTextPosition();
OleDbDataReader dReader;
OleDbConnection conn = new OleDbConnection(connectionString);
conn.Open();
OleDbCommand cmd = new OleDbCommand("SELECT [Code] FROM [Data] WHERE Code='@Code'", conn);
cmd.Parameters.Add(new OleDbParameter("@Code", OleDbType.VarChar, 200, "Code"));
cmd.Parameters["@Code"].Value = textBoxCodeContainer[0][y].Text;
dReader = cmd.ExecuteReader();
AutoCompleteStringCollection codesCollection = new AutoCompleteStringCollection();
while (dReader.Read())
{
    string numString = dReader[0].ToString().PadLeft(4, '0');
    codesCollection.Add(numString);
}
dReader.Close();
conn.Close();

以下是图片链接:https://www.dropbox.com/s/5q8pyztqy7ejupy/Capture.PNG(此图像是连接到程序的数据库)

https://www.dropbox.com/s/mlwkvuvtxww2hjm/Untitled_2.png(此图显示代码列工作良好,但当选择代码时,说明列中没有显示说明)

这是我的问题:我希望当代码被选择为显示在Unttled_2.png中时,"0001"的描述(显示在Untiled_2.png中)显示的是"0001",即"a"(参考数据库,Capture.png)

基于访问数据库c#中的代码检索数据

假设Description是读取代码的表中的一列,则必须将该列添加到查询检索的字段列表中

OleDbDataReader dReader;
string cmdText="SELECT [Code], [Description] FROM [Data] WHERE Code=@Code"
using(OleDbConnection conn = new OleDbConnection(connectionString))
using(OleDbCommand cmd = new OleDbCommand(cmdText, conn))
{
    conn.Open();
    cmd.Parameters.Add(new OleDbParameter("@Code", OleDbType.VarChar, 200, "Code"));
    cmd.Parameters["@Code"].Value = textBoxCodeContainer[0][y].Text;
    using(OleDbDFataReader dReader = cmd.ExecuteReader())
    {
        AutoCompleteStringCollection codesCollection = new AutoCompleteStringCollection();
        while (dReader.Read())
        {
            string numString = dReader[1].ToString());
            codesCollection.Add(numString);
        }
    }
}

我还修复了在@Code参数周围加单引号的命令文本。不需要它们,因为在生成Parameter时已经指定了数据类型
还要注意一次性对象周围的using语句。通过这种方式,它们将被正确地关闭,并由框架在异常

的情况下进行处理

这里的问题是Code='@Code'"删除'',然后将其视为参数

并将代码更改为以下

OleDbCommand cmd = new OleDbCommand("SELECT [Code] FROM [Data] WHERE Code=?", conn);
cmd.Parameters.AddWithValue("p1", textBoxCodeContainer[0][y].Text);

OLE DB.NET提供程序不支持用于传递的命名参数SQL语句或由调用的存储过程的参数当CommandType设置为Text时使用OleDbCommand。在这种情况下必须使用问号(?)占位符。

我看不出你把AutoCompleteCustomSource设置为控件,按照下面的操作

textbox1.AutoCompleteMode = AutoCompleteMode.Append;
textbox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
textbox1.AutoCompleteCustomSource = codesCollection;