使用SQL REPLACE函数后列名变为Expr1007的问题咨询
问题描述
原本执行的VB查询代码:
Dim cmd1 As New OleDbCommand("Select name, number, detailedliste from table1", conn) Dim da As New OleDbDataAdapter da.SelectCommand = cmd1 Dim FinalTable As New DataTable FinalTable.Clear() da.Fill(FinalTable)
为替换detailedliste列中的;为,,修改SQL语句为:
Dim cmd1 As New OleDbCommand("Select name, number, replace(detailedliste,';',',') from table1", conn)
执行后字符替换成功,但该列名变为Expr1007,导致后续代码访问表时出错。请问此现象是否正常?若正常,如何重命名FinalTable中的该列?
问题解答
现象是否正常?
这个现象完全正常。当你在SQL中对列使用replace这类函数进行计算时,数据库无法识别原始列名,会自动生成一个临时列名(比如Expr1007这类格式的名称),这是数据库的默认行为。
解决方法
有两种常用的解决方式:
在SQL语句中直接指定列别名(推荐)
不需要修改后续代码,直接在SQL里用AS关键字给处理后的列指定原始列名,填充到DataTable后列名就不会改变:Dim cmd1 As New OleDbCommand("Select name, number, replace(detailedliste,';',',') AS detailedliste from table1", conn)填充DataTable后重命名列
如果无法修改SQL语句,可以在da.Fill(FinalTable)之后,手动修改DataTable的列名:' 注意:若临时列名不是Expr1007,需确认实际列名;也可按索引定位 FinalTable.Columns("Expr1007").ColumnName = "detailedliste" ' 或者按索引(假设该列是第三列,索引从0开始) ' FinalTable.Columns(2).ColumnName = "detailedliste"
内容的提问来源于stack exchange,提问作者Mika
相关产品推荐
相关产品推荐

