[英]C# OdbcDataReader or DataTable.Load column name issue
I was happy coding my application and I faced this issue that scary me a little bit. 我很高兴为我的应用程序编写代码,面对这个让我有些害怕的问题。
I have a SQLite db file and when I try to read a table using the OdcbDataReader and load it into a table using the DataTable.Load I get different results on the column name depending on the application I'm working on. 我有一个SQLite db文件,当我尝试使用OdcbDataReader读取表并使用DataTable.Load加载到表中时,根据正在使用的应用程序,列名会得到不同的结果。
Sometimes it returns table_name.column_name and sometimes it returns only column_name. 有时它返回table_name.column_name,有时它仅返回column_name。
The code is only this: 代码只是这样:
public DataTable GetTable(string table_name)
{
table = null;
if (conn_str != null)
{
try
{
using (OdbcConnection conn = new OdbcConnection(conn_str.ToString()))
{
StringBuilder query = new StringBuilder();
query.Append("SELECT * ");
query.Append("FROM [");
query.Append(table_name + "]");
using (OdbcCommand cmd = new OdbcCommand(query.ToString(), conn))
{
conn.Open();
table = new DataTable();
using (OdbcDataReader dr = cmd.ExecuteReader())
{
DataSet ds = new DataSet();
ds.EnforceConstraints = false;
ds.Tables.Add(table);
table.Load(dr);
}
}
}
}
catch (Exception ex)
{
Debug.Print(ex.Message);
table = null;
}
}
return table;
}
The connection string used is exactly the same: 使用的连接字符串完全相同:
"DRIVER={SQLite3 ODBC Driver};DATABASE=databesename.db3;" “ DRIVER = {SQLite3 ODBC驱动程序}; DATABASE = databesename.db3;”
Any ideas why this is happening? 任何想法为什么会这样?
Don't resolve the issue but at least gives an workaround. 无法解决问题,但至少可以提供解决方法。
Adding a replace to column name to remove the table_name if the Reader insert it. 如果Reader插入了table_name,则在列名上添加一个替换以删除table_name。
foreach (DataColumn col in table.Columns)
{
//Fix column names if the Reader insert the table name into the ColumnName
col.ColumnName = col.ColumnName.Replace(table_name + ".", "");
}
Code After the change: 代码更改后:
public DataTable GetTable(string table_name)
{
table = null;
if (conn_str != null)
{
try
{
using (OdbcConnection conn = new OdbcConnection(conn_str.ToString()))
{
StringBuilder query = new StringBuilder();
query.Append("SELECT * ");
query.Append("FROM [");
query.Append(table_name + "]");
using (OdbcCommand cmd = new OdbcCommand(query.ToString(), conn))
{
conn.Open();
table = new DataTable();
using (OdbcDataReader dr = cmd.ExecuteReader())
{
DataSet ds = new DataSet();
ds.EnforceConstraints = false;
ds.Tables.Add(table);
table.Load(dr);
foreach (DataColumn col in table.Columns)
{
//Fix column names if the Reader insert the table name into the ColumnName
col.ColumnName = col.ColumnName.Replace(table_name + ".", "");
}
}
}
}
}
catch (Exception ex)
{
Debug.Print(ex.Message);
table = null;
}
}
return table;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.