我使用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溢出。必须在1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间。 有没有办法在foreach中说这样的事情:如果数据集中的DateTime字段值是DateTime.MinValue,请不要将数据集中的DateTime字段插入我的数据库?
祝你好运
答案 0 :(得分:1)
我认为您需要确保数据表中没有DateTime.MinValue - 您是否控制该表的填充?
如果是这样,请使用SqlDateTime.MinValue而不是在DateTime字段中存储DateTime.MinValue。或者,如果要将NULL存储到数据库中,请将DBNull存储在数据表中。
答案 1 :(得分:0)
如果你有SQL Server 2008并且不介意存储MinValue,你可以使用DateTime2来解决这个问题。
答案 2 :(得分:0)
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;
}
}
}
}
}
}