1

选择代码时如何从数据库中检索数据?例如:在我的数据库中,我得到了 Code 列和 Description 列.. 对于 Code 列,我得到了“0001”,而对于 Description 列,我得到了“Abc”,或者可以说是“0001”的描述是“ABC”。

我已经尝试了很多次,但总是失败,有人知道怎么做吗?我想当用户选择“0001”时,“Abc”出现在Description栏中

这是代码:

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(此图显示代码栏运行良好,但选择代码时,说明栏没有出现说明)

这是我的问题:我希望当代码被选择为显示在 Untitled_2.png 中时,“0001”的描述(显示在 Untitled_2.png 中)显示“0001”的描述,即“A”(请参阅数据库,Capture.PNG)

4

2 回答 2

2

假设 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 参数周围加上单引号的命令文本。它们不是必需的,因为您在构建参数时已经指定了数据类型。
还要注意一次性对象周围的 using 语句。这样,它们也将在出现异常的情况下被框架正确关闭和处理

于 2013-08-15T10:15:04.020 回答
2

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

并更改代码如下

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

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

我没有看到您设置AutoCompleteCustomSource为控件,请执行以下操作

textbox1.AutoCompleteMode = AutoCompleteMode.Append;
textbox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
textbox1.AutoCompleteCustomSource = codesCollection;
于 2013-08-15T10:16:59.000 回答