datatable列类型转换问题

cwmwss 2009-05-26 04:48:09
从数据库里读出一个datatable.其中有一些列是datetime类型的。
想把这个结果dt的中datetime列转成string类型的。如何做?
除了以下方法:
1、新建datatabe,改成string列,再循环dt行和列,如果列是datetime,转成string存新dt
2、读取数据库的时候就用convert转换。
...全文
2030 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
cwmwss 2009-05-27
  • 打赏
  • 举报
回复
上面的方法就是不用在rows再循环column
cwmwss 2009-05-27
  • 打赏
  • 举报
回复
暂时想到这个方法来变列类型:
public DataTable ChangeColumnType(DataTable dt)
{

DataTable tempdt = new DataTable();
foreach (DataColumn dc in dt.Columns)
{
DataColumn tempdc = new DataColumn();
if (dc.DataType != typeof(DateTime))
{
tempdc.ColumnName = dc.ColumnName;
tempdc.DataType = dc.DataType;
}
else
{
tempdc.ColumnName = dc.ColumnName;
tempdc.DataType = typeof(String);
}
tempdt.Columns.Add(tempdc);
}
DataRow newrow;
foreach (DataRow dr in dt.Rows)
{
newrow = tempdt.NewRow();
newrow.ItemArray = dr.ItemArray;
tempdt.Rows.Add(newrow);
}
return tempdt;

}
有更好方法的请跟贴
cwmwss 2009-05-27
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 frankonlyfine 的回复:]
你是在什么情况下比较?绑定数据的时候比较吗?你可以把取出的字段都ToString一下,或者是固定死的一个时间列ToString
[/Quote]原因比较复杂。
for (m = 0; m < dtDistinct.Columns.Count; m++)
{
if (m != (dtDistinct.Columns.Count - 1))
{
CS$0$0002 = filters;
filters = CS$0$0002 + dtDistinct.Columns[m].ColumnName + "='" + dtDistinct.Rows[j][dtDistinct.Columns[m].ColumnName].ToString() + "' and ";
}
else
{
CS$0$0002 = filters;
filters = CS$0$0002 + dtDistinct.Columns[m].ColumnName + "='" + dtDistinct.Rows[j][dtDistinct.Columns[m].ColumnName].ToString() + "'";
}
}
temp = new DataView(dtSource, filters, "", DataViewRowState.CurrentRows).ToTable();
在filters里有时间类型。temp这句出错。可是因为一些原因,这里不好改动。
所有想在这dtSource传进来时就把时间列转成string类型先。
MesserP 2009-05-26
  • 打赏
  • 举报
回复
学习学习~
chen_ya_ping 2009-05-26
  • 打赏
  • 举报
回复
还有一个方法就是你在数据库中不要用DateTime 直接用varchar类型就可以了。
一束光丫. 2009-05-26
  • 打赏
  • 举报
回复
if(DateTime.Compare(dt1,dt2)>0)
里面的dt1.dt2指的是两个时间
一束光丫. 2009-05-26
  • 打赏
  • 举报
回复
不用转换为string啊
一束光丫. 2009-05-26
  • 打赏
  • 举报
回复
两个时间类型的做比较可以用Compare方法
frankonlyfine 2009-05-26
  • 打赏
  • 举报
回复
你是在什么情况下比较?绑定数据的时候比较吗?你可以把取出的字段都ToString一下,或者是固定死的一个时间列ToString
cwmwss 2009-05-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 frankonlyfine 的回复:]
楼主不知道你为什么要把DateTime转成String ,在页面上显示不就是STRING了吗?你把你想要实现的功能说出来,我看看还有没有其它忧化的方法
[/Quote]

无法在 System.DateTime 和 System.String 上执行“=”操作。

所以要先转成string
cwmwss 2009-05-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 c02645 的回复:]
select convert(char(10),时间,20) from table
select convert(char(7),时间,20) from table
select convert(char(18),时间,20) from table
[/Quote]这个是我说的第二种方法
teerhu 2009-05-26
  • 打赏
  • 举报
回复
通常就楼主说的两种方法
frankonlyfine 2009-05-26
  • 打赏
  • 举报
回复
楼主不知道你为什么要把DateTime转成String ,在页面上显示不就是STRING了吗?你把你想要实现的功能说出来,我看看还有没有其它忧化的方法
c02645 2009-05-26
  • 打赏
  • 举报
回复
select convert(char(10),时间,20) from table
select convert(char(7),时间,20) from table
select convert(char(18),时间,20) from table
frankonlyfine 2009-05-26
  • 打赏
  • 举报
回复
没有了,就这种方法,你现在是要判断每行每列的数据类型你只能这样
xuancheng999 2009-05-26
  • 打赏
  • 举报
回复
string [] re = new string[table.Rows.count];
int i = 0;
foreach (DataRow row in table.Rows)
{
re[i] = row["datetime"] as string ;
i++;
}

任何类型 都可以转



cwmwss 2009-05-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 frankonlyfine 的回复:]
C# code
foreach(DataRow dr in DataTable1.Rows)
{
foreach(DataColumn col in DataTable1.Columns)
{
if(col.DataType.FullName.IndexOf("datetime") > -1)
{
//这里执行你存入新DT的方法
}
}
}
[/Quote]这是我的第一种方法。有效率更高的吗
frankonlyfine 2009-05-26
  • 打赏
  • 举报
回复 1

foreach(DataRow dr in DataTable1.Rows)
{
foreach(DataColumn col in DataTable1.Columns)
{
if(col.DataType.FullName.IndexOf("datetime") > -1)
{
//这里执行你存入新DT的方法
}
}
}
xingzhiasa 2009-05-26
  • 打赏
  • 举报
回复
datatable读取出来的不都是object吗?

莫名了,看看其他人怎么回复再说……

62,253

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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