c#数据集:我怎么知道如果列是一个日期时间/布尔类型
本文关键字:日期 一个 时间 类型 布尔 我怎么知道 数据集 如果 | 更新日期: 2023-09-27 18:10:15
在c#中,我从一些查询中创建一些数据集或数据表。
来自数据库中DateTime列的数据类型为System.String。
是否有一种方法可以通过编程识别包含DateTime信息的列?
同样的问题,布尔数据被认为是系统。Int32 ?
谢谢
EDIT1因为这似乎还没有完全理解:
MyDataColumn.DataType is "System.String" (for DateTime) !
MyDataColumn.DataType is "System.Int32" (for Boolean) !
所以我不能从DataType中得到我想要的,否则我甚至不会发布这个
EDIT2和TryParse()的想法有一个大问题在这里,这是更明显的布尔/系统。Int32混淆:如果我看到"1"或"0",我可以认为这是一个布尔值,而它也可能是一个Int32列。TryParse()有同样的缺陷
if (myDataTable.Columns["thisColumn"].DataType == System.Type.GetType("System.DateTime"))
{
...
}
else
{
}
EDIT:
要检查包含的数据,您可以尝试解析其值。因此,对于该列中的每个值,您可以这样做:
DateTime dateTime;
DateTime.TryParse("your string", out dateTime);
按如下方式创建一个存储过程:
Alter proc proc_GetDataTypeValueByColumnName
(
@TableName varchar(500)='tblAdminUser',
@ColumnName varchar(500)='Id'
)
as
declare @DataType varchar(500);
if exists(select 1 from sys.tables where name=@TableName)
begin
set @DataType=(SELECT t.Name 'Data type'FROM sys.columns c INNER JOIN
sys.types t ON c.system_type_id = t.system_type_id
WHERE
c.object_id = OBJECT_ID(''+@TableName+'') and c.name=@ColumnName)
-- select dbo.GetDataTypeValue(@DataType)
select @DataType
End
需要传递想要获取数据类型的表名和列名如果你想在代码中获得它,那么你可以使用以下内容:
public String GetNumberForDataTypeofColumn(String TableName, String ColumnName)
{
SqlParameter[] param = new SqlParameter[2];
param[0] = new SqlParameter("@TableName", TableName);
param[1] = new SqlParameter("@ColumnName", ColumnName);
String result = SqlHelper.ExecuteScalar(ConfigurationManager.ConnectionStrings["cn"].ConnectionString, CommandType.StoredProcedure, "proc_GetDataTypeValueByColumnName", param).ToString();
return result;
}
还有另一种方式是::data列有属性"DataType",你也可以从下面的检查:
dtItems.Columns[0].DataType
希望对你有帮助
您可以使用LINQ查看数据表中是否存在DateTime
类型的列。您需要使用DateTime.TryParse
解析每个列,以查看是否有任何列被成功解析,如:
if (dt == null || dt.Rows.Count <= 0)
return false;
DateTime temp;
if (dt.Rows[0].ItemArray.Any(r => DateTime.TryParse(r.ToString(),
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out temp)))
{
//Column exists.
}
如果你想获得列索引,那么你可以尝试:
var column = dt.Rows[0].ItemArray
.Select((r, index) => new { Value = r, Index = index })
.FirstOrDefault(t => DateTime.TryParse(t.ToString(),
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out temp));
if(column != null)
Console.WriteLine(column.Index);
(记得包括System.LINQ)