3

在 C# 中,我从一些查询创建一些数据集或数据表。

来自数据库中 DateTime 列的数据被键入为 System.String。

有没有办法以编程方式将列标识为包含 DateTime 信息?

被视为 System.Int32 的布尔数据的相同问题?

谢谢

EDIT1,因为这似乎没有完全理解:

MyDataColumn.DataType is "System.String" (for DateTime) !

MyDataColumn.DataType is "System.Int32" (for Boolean) !

所以我不能从 DataType 中得到我想要的,否则我什至不会发布这个。

EDIT2并且 TryParse() 的想法在这里有一个大问题,布尔/System.Int32 混淆更加明显:如果我看到“1”或“0”,我可能认为它是一个布尔值,而它也可能是一个 Int32柱子。TryParse() 有同样的缺陷。

4

4 回答 4

4
if (myDataTable.Columns["thisColumn"].DataType == System.Type.GetType("System.DateTime"))
{
...
}
else
{
}
于 2013-04-22T12:24:40.487 回答
3

编辑:

要检查包含的数据,您可以尝试解析其值。因此,对于该列中的每个值,您都可以这样做:

 DateTime dateTime;
 DateTime.TryParse("your string", out dateTime);
于 2013-04-22T12:17:27.780 回答
1

创建一个存储过程,如下所示:

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 Column 具有属性“DataType”,您也可以从以下内容中进行检查:

dtItems.Columns[0].DataType

希望对你有帮助

于 2013-04-22T12:22:18.337 回答
0

您可以使用 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)

于 2013-04-22T12:43:01.633 回答