Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 将Datatable中的所有DateTime列转换为SqlDateTime列_.net_Sql Server 2005_Datatable_Type Conversion - Fatal编程技术网

.net 将Datatable中的所有DateTime列转换为SqlDateTime列

.net 将Datatable中的所有DateTime列转换为SqlDateTime列,.net,sql-server-2005,datatable,type-conversion,.net,Sql Server 2005,Datatable,Type Conversion,我想做的基本上是获取任何通用的数据表,然后 将所有DateTime列转换为SqlDateTime列。(即,如果datetime列值=datetime.MinValue,则将其设置为SqlDateTime.Null) 我是否可以在不改变原始数据表(即不添加计算列)或逐行解析整个数据表的情况下执行此操作 我之所以要这样做,是因为我需要将这个数据表提供给一个SQLBulkCopy方法,该方法将把它们一起写入数据库。使用datetime字段的问题是,它在上载时抛出一个错误 AgentX嗯,我能想到的最好

我想做的基本上是获取任何通用的数据表,然后 将所有DateTime列转换为SqlDateTime列。(即,如果datetime列值=datetime.MinValue,则将其设置为SqlDateTime.Null)

我是否可以在不改变原始数据表(即不添加计算列)或逐行解析整个数据表的情况下执行此操作

我之所以要这样做,是因为我需要将这个数据表提供给一个SQLBulkCopy方法,该方法将把它们一起写入数据库。使用datetime字段的问题是,它在上载时抛出一个错误


AgentX

嗯,我能想到的最好的办法就是

我知道这是一行一行地复制数据表,我相信使用LINQ可以更优雅地完成

还有其他人有答案吗

                Dim dtOut As DataTable = dt.Clone()
                For Each c As DataColumn In dtOut.Columns
                    If c.DataType.FullName = GetType(DateTime).FullName Then
                        c.DataType = GetType(SqlTypes.SqlDateTime)
                    End If
                Next

                dtOut.BeginLoadData()
                Dim drtmp As DataRow
                For Each dr As DataRow In dt.Rows
                    drtmp = dtOut.NewRow()
                    For Each dc As DataColumn In dt.Columns
                        If dc.DataType.FullName = GetType(DateTime).FullName Then
                            If dr(dc) = Date.MinValue Then
                                drtmp(dc.ColumnName) = SqlTypes.SqlDateTime.Null
                            Else
                                drtmp(dc.ColumnName) = dr(dc)
                            End If
                        Else
                            drtmp(dc.ColumnName) = dr(dc)
                        End If
                    Next
                    dtOut.Rows.Add(drtmp)
                Next
                dtOut.EndLoadData()

我能想到的最好的办法就是

我知道这是一行一行地复制数据表,我相信使用LINQ可以更优雅地完成

还有其他人有答案吗

                Dim dtOut As DataTable = dt.Clone()
                For Each c As DataColumn In dtOut.Columns
                    If c.DataType.FullName = GetType(DateTime).FullName Then
                        c.DataType = GetType(SqlTypes.SqlDateTime)
                    End If
                Next

                dtOut.BeginLoadData()
                Dim drtmp As DataRow
                For Each dr As DataRow In dt.Rows
                    drtmp = dtOut.NewRow()
                    For Each dc As DataColumn In dt.Columns
                        If dc.DataType.FullName = GetType(DateTime).FullName Then
                            If dr(dc) = Date.MinValue Then
                                drtmp(dc.ColumnName) = SqlTypes.SqlDateTime.Null
                            Else
                                drtmp(dc.ColumnName) = dr(dc)
                            End If
                        Else
                            drtmp(dc.ColumnName) = dr(dc)
                        End If
                    Next
                    dtOut.Rows.Add(drtmp)
                Next
                dtOut.EndLoadData()
public void ChangeDateTimeColumn(DataTable newDataTable)
{
对于(int i=0;i
public void ChangeDateTimeColumn(DataTable newDataTable)
{
对于(int i=0;i
是否缺少一个
dtOut.Rows.Add(drtmp)
?此外,您可能需要删除变量
i
j
的定义。是否缺少
dtOut.Rows.Add(drtmp)
?此外,您可能需要删除变量
i
j
的定义。