从 C# 表单中搜索两个访问表
Posted
技术标签:
【中文标题】从 C# 表单中搜索两个访问表【英文标题】:search inside two access tables from C# form 【发布时间】:2020-12-30 22:40:26 【问题描述】:这是我的代码,我如何在 Table1 和 Table2 中搜索相同的 textbox1.text 值,换句话说:
// [表1]
| name | age |
| -------- | -------------- |
| aaa | 12 |
| bbb | 13 |
| ccc | 14 |
// [Table2]
| name | gender |
| -------- | -------------- |
| aaa | male |
| bbb | female |
| ccc | male |
当 [name] 等于 textbox1.text 时,如何获取年龄和性别值并将其显示在 txt.Text 中?
谢谢
con.Open();
// search inside table1
OleDbCommand da = new OleDbCommand("SELECT * FROM [Table1] WHERE Table1.name='@name",con);
//search inside table2
OleDbCommand da2 = new OleDbCommand("SELECT * FROM [Table2] WHERE Table2.name='@name", con);
// give @name value to table1 and table2 as parameters
da.Parameters.AddWithValue("@name",textBox1.Text);
da2.Parameters.AddWithValue("@name", textBox1.Text);
// its time for executing
OleDbDataReader dr = da.ExecuteReader();
OleDbDataReader dr2 = da2.ExecuteReader();
// now display it in textBox as a string
if (dr.Read())
dr2.Read();
for (int x = 0; x < 4;x++ )
if(dr[x].ToString() !="")
txt.Text += dr[x].ToString() + System.Environment.NewLine;
else MessageBox.Show("error");
con.Close();
【问题讨论】:
内联表 关系可以作为内连接实例吗? 为什么这个数据甚至在两个表中而不是一个?可能应该保存生日并计算年龄。 你的SQL好像有语法错误;奇数个撇号 另外,您使用读者的 Read() 方法的逻辑有点不靠谱。使用数据适配器并填充数据表 【参考方案1】:将数据连接在一起并限制在文本框中写入的内容并在 datagridview 控件中显示:
using(var da = new OleDbDataAdapter("SELECT FROM Table1 t1 INNER JOIN Table2 t2 ON t1.Name = t2.Name WHERE t1.name=@name", con))
da.SelectCommand.Parameters.AddWithValue("@name",textBox1.Text);
var dt = new DataTable();
da.Fill(dt);
someDataGridView.DataSource = dt;
这实际上就是您需要做的所有事情;数据适配器将打开连接等;只需编写一个 sql,添加参数,填充数据表,将表分配为网格的 DataSource(您需要在表单中添加一个 datagridview 并为其命名并调整代码名称)
【讨论】:
我可以在文本框多行显示吗? 是的,你可以......但你不应该因为它看起来很糟糕,除非你设置一个等宽字体并用空格填充数据,这样它就有一个一致的宽度——这就是我们所做的40 年前基于终端的系统。如果您对此有信心,请编写一个循环来遍历数据表中的行,并将它们的字符串表示形式添加到文本框中。您最终会得到一个缓慢的结果,缺乏功能(排序、编辑)和灵活性,并且维护和更新是一件苦差事。我看不到任何积极的一面 先生,我知道它看起来很糟糕,但我想自定义它并垂直显示数据并在每行添加一些常量文本,然后如果用户在打印之前进行任何编辑,他可以轻松完成我每列有 15 列,有些列有空值,我不想向用户显示它 然后考虑一个报告解决方案;很多存在 - github.com/ritchiecarroll/Report.NET 出现在“c# 报告库”的前 5 个结果中 - 从未使用过它,但它似乎是合理的(TableLayoutSample 看起来是你想要的) 如果您的问题得到解决,您应该单击灰色复选标记将其变为绿色。这意味着它在仪表板上以不同的颜色显示,人们知道它已被回答以上是关于从 C# 表单中搜索两个访问表的主要内容,如果未能解决你的问题,请参考以下文章
如何将自动填充的表单记录(从另一条记录创建)添加到访问表中?