基于访问数据库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)
假设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;