我使用以下代码从SELECT
Sql查询中读取,然后从中填充DataTable
(dt
是我的DataTable,cs
是我的连接字符串并且query
是Sql脚本):
using (OleDbConnection conn = new OleDbConnection(cs))
{
conn.Open();
OleDbCommand cmd = new OleDbCommand(query, conn);
dt.Load(cmd.ExecuteReader());
conn.Close();
}
它工作正常,我的DataTable
将填充我的查询返回的内容。
但我希望我的DataTable
只包含string
(varchar
)值,无论我的查询是什么。
例如。如果我的查询说:
SELECT 1 AS ID, 'John' AS Name
然后我的Datatable的ID值将是一个整数,而我希望所有内容都是字符串。 我怎样才能做到这一点?
答案 0 :(得分:1)
// Create a temporary table
DataTable dtNew = new DataTable();
for(int i=0;dt.Columns.Count;i++)
{
dtNew.Columns.Add(dt.Columns[i].ColumnName,typeof(string));
}
// Add data to new table
for(int i=0;dt.Rows.Count;i++)
{
dtNew.Rows.Add();
for(int j=0;dt.Columns.Count;j++)
{
dtNew.Rows[i][j] = dt.Rows[i][j];
}
}
dt=null;
dt=dtNew.Copy();
答案 1 :(得分:0)
没有直接的方法来指定结果应该是所有字符串。您不能简单地指示DataTable.Load
将每个类型转换为字符串。
您的选择是:
DataTable
中的每个值转换为字符串
每一行和每一行。varchar
这可以帮助你入门。
DataTable dtAllString = new DataTable();
foreach (DataColumn column in dt.Columns)
{
dtAllString.Columns.Add(column.ColumnName, typeof(string));
}
foreach (DataRow row in dt.Rows)
{
List<string> columnValues = new List<string>();
foreach (DataColumn col in dt.Columns)
{
columnValues.Add(Convert.ToString(row[col]));
}
dtAllString.Rows.Add(columnValues.ToArray());
}