请问此问题如何解决?

foxd 2016-05-22 05:44:43
以下的sql语句是可以正确执行的:
string sql = "Select a.*,b.Name from tb_TreatmentRecord as a Inner Join tb_PersonalInfo as b On a.SerialNo = b.SerialNo where a.id = " + frmLogin.M_Record + "";
dt = dbc.getds(sql, "TreatmentRecord_PersonalInfo").Tables[0];
if (dt.Rows.Count != 0)
{
this.lblpatientName.Text = Convert.ToString(dt.Rows[0]["b.Name"]); //报错!
this.cbbDiagnosis.Text = Convert.ToString(dt.Rows[0]["[a.Diagnosis]"]); //报错!
......
}

但是当我想把查询的结果显示出来,上面两句的写法均会报错,说是:列"b.Name" 不属于表TreatmentRecord_PersonalInfo。
但如果改为:

this.lblpatientName.Text = Convert.ToString(dt.Rows[0][0]);
this.cbbDiagnosis.Text = Convert.ToString(dt.Rows[0][1]);
就不会报错且能正常赋值了。可是这样就得一个一个的数字段太不方便,请问如何可以用字段名的方式来写呢?谢谢!
...全文
138 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
songbing774933 2016-05-23
  • 打赏
  • 举报
回复
select语句中的形如A.B的列,查询结果的列名都是B 这个貌似所有的数据库都一样吧。 和C#没有关系。 实在怕不保险,那就用别名啊
Justin-Liu 2016-05-23
  • 打赏
  • 举报
回复
[]里不用加b.
gray55455 2016-05-22
  • 打赏
  • 举报
回复
this.lblpatientName.Text = Convert.ToString(dt.Rows[0]["b.Name"]); //报错! this.cbbDiagnosis.Text = Convert.ToString(dt.Rows[0]["[a.Diagnosis]"]); //报错! 你的SQL查出来的datatable列名分别是Name和Diagnosis,而不是b.Name和a.Diagnosis
bfq 2016-05-22
  • 打赏
  • 举报
回复
如果你的数据库的字段名不重复,可以直接用dt.Rows[0]["Name"]这样取出,如果有重复的,可以给字段加上别名,如 Select a.*,b.Name as bname from tb_T 取出时用dt.Rows[0]["bname"]即可

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧