Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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
Asp.net 获取SqlBulkCopy.WriteToServer()中的SqlDateTime溢出_Asp.net_Sql_Sqlbulkcopy - Fatal编程技术网

Asp.net 获取SqlBulkCopy.WriteToServer()中的SqlDateTime溢出

Asp.net 获取SqlBulkCopy.WriteToServer()中的SqlDateTime溢出,asp.net,sql,sqlbulkcopy,Asp.net,Sql,Sqlbulkcopy,我使用SqlBuldCopy类将类型化数据集中的数据插入MSSQL数据库: foreach (DataTable dt in ds.Tables) { using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn)) { bulkCopy.DestinationTableName = "dbo." + dt.TableName + "_neu"; try { bul

我使用SqlBuldCopy类将类型化数据集中的数据插入MSSQL数据库:

foreach (DataTable dt in ds.Tables)
{
    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn)) 
    {
        bulkCopy.DestinationTableName = "dbo." + dt.TableName + "_neu";

        try
        {
            bulkCopy.WriteToServer(dt);
        }
        catch (Exception ex)
        {
            throw new FaultException("\n" + dt.TableName + ": " + ex.Message);
        }
    }
}
它工作得很好。但是当我将DataTime.MinValue插入数据库时,我得到了这个错误:SqlDateTime溢出。必须在1753年1月1日12:00:00 AM和9999年12月31日11:59:59 PM之间。 在foreach中是否有这样一种说法:如果dataset中的DateTime字段值是DateTime.MinValue,请不要将dataset中的DateTime字段插入我的数据库


致以最诚挚的问候

我认为您需要确保数据表中没有DateTime.MinValue-您是否控制该表的填充


如果是这样,请使用代替,而不是在DateTime字段中存储DateTime.MinValue。或者,如果希望将NULL存储到数据库中,请将DBNull存储在datatable中。

如果您使用SQL Server 2008,并且不介意存储最小值,则可以使用来解决此问题。

public void ChangeDateTimeColumn(datatable newDataTable)
{
对于(int i=0;i
谢谢您的回答。我不控制数据表的填充。我从web服务获取数据库。在bulkCopy.WriteToServer(dt)之前如何检查;如果DateTime字段不是DateTime.MinValue?如果为true,则在数据库中存储DBNull。您可以循环每一行,并更改所有包含DateTime.MinValues的DateTime字段。请在已修改的位置添加一些文本以解决此问题。
public void ChangeDateTimeColumn(DataTable newDataTable)
{
    for (int i = 0; i < newDataTable.Rows.Count; i++)
    {
        for (int j = 0; j < newDataTable.Columns.Count; j++)
        {
            DataColumn dc = newDataTable.Columns[j];
            if (dc.DataType == typeof(DateTime))
            {
                string name = dc.ColumnName;
                DataRow row = newDataTable.Rows[i];
                if (row[name] != null && row[name].ToString().Trim() != "")
                {
                    DateTime value = (DateTime)row[name];
                    if (value < (DateTime)SqlDateTime.MinValue)
                    {
                        row[name] = (DateTime)SqlDateTime.MinValue;
                    }
                    else if ((DateTime)SqlDateTime.MaxValue < value)
                    {
                        row[name] = (DateTime)SqlDateTime.MaxValue;
                    }
                }
            }
        }
    }
}