2015-08-14 61 views
0

我从一个MS Access数据库获取数据,并在我的控制台应用程序使用此代码将其移动到SQL Server:SQLDATETIME溢出必须是1753年1月1日和12/31/9999从接入之间来为sql

if (getvalue == "plantname") 
{ 
     Console.WriteLine("NetWeightMasterData-Plant Started"); 
     var dw = new System.Data.DataTable(); 
     string accdbConnStriok = ConfigurationManager.ConnectionStrings["NetWeightIok"].ToString(); 
     using (var accdbConn = new OdbcConnection(accdbConnStriok)) 
     { 
     using (var da = new OdbcDataAdapter("SELECT [Unit UPC Base Item], 
    [Production Line],[Preset Number],[Package Type],[Weight Factor], 
    [Piece],[Pcs Per Unit],[Upper Limit Unit],[Upper Limit Factor], 
    [Label Wt (g)],[Tare Wt (g)],[Constant Tare Wt (g)], 
    [Tare Variation Factor (g)],[Pkg Length (mm)],[Film Product Code], 
    [Film Width (mm)],[Forming Tube (mm)],[Type of Jaws],[Last Updated], 
    [Comments] FROM [Net Weight Master Data]", accdbConn)) 
      { 
      da.Fill(dw); 

      } 
     } 
    Console.WriteLine("DataTable filled from NetWeight db NetWeightMasterData-Iola- Row count: {0}", dw.Rows.Count, DateTime.Now.ToString()); 
    string sqlConnStriok = ConfigurationManager.ConnectionStrings["sqlconiok"].ToString(); 
    using (var sqlConn = new SqlConnection(sqlConnStriok)) 
     { 
     sqlConn.Open(); 
     using (var cmd = new SqlCommand()) 
     { 
      cmd.Connection = sqlConn; 
     cmd.CommandText = "CREATE TABLE #NetWeightMasterData ([Unit UPC Base Item] [nvarchar](50) NOT NULL,[Production Line] [nvarchar](50) NOT NULL, 
    [Preset Number] [nvarchar](50) NULL,[Package Type] [nvarchar](50) NULL, 
    [Weight Factor] [float](53) NULL,[Piece] [nvarchar](255), 
    [Pcs Per Unit] [float](53) NULL,[Upper Limit Unit] [nvarchar](50) NULL, 
    [Upper Limit Factor] [float](53) NULL,[Label Wt (g)] [float](53) NULL, 
    [Tare Wt (g)] [float](53) NULL,[Constant Tare Wt (g)] [float](53) NULL, 
    [Tare Variation Factor (g)] [float](53) NULL, 
    [Pkg Length (mm)] [float](53) NULL,[Film Product Code] [nvarchar](255) NULL, 
    [Film Width (mm)] [int] NULL,[Forming Tube (mm)] [int] NULL, 
    [Type of Jaws] [nvarchar](255) NULL,[Last Updated] [datetime] NULL, 
    [Comments] [nvarchar](255) NULL)"; 
       cmd.ExecuteNonQuery(); 
        } 
     using (SqlTransaction tran = sqlConn.BeginTransaction(System.Data.IsolationLevel.ReadCommitted)) 
      { 
      try 
      { 
      using (var sbc = new SqlBulkCopy(sqlConn, SqlBulkCopyOptions.Default, tran)) 
     { 
     sbc.BatchSize = 100; 
     sbc.NotifyAfter = 100; 
     sbc.BulkCopyTimeout = 100; 
     sbc.DestinationTableName = "#NetWeightMasterData";          Console.WriteLine(DateTime.Now.ToString()); 
     sbc.WriteToServer(dw); 
     Console.WriteLine("After Datatable", DateTime.Now.ToString()); 
     } 
     } 
     catch (Exception ex) 
     { 
     Console.WriteLine(ex.Message.ToString()); 
     } 
     Console.WriteLine(DateTime.Now.ToString()); 
      using (var cmd = new SqlCommand()) 
      { 
      cmd.Connection = sqlConn; 
      cmd.Transaction = tran; 
      cmd.CommandText = "SELECT COUNT(*) AS n FROM #NetWeightMasterData"; 
      Console.WriteLine("SqlBulkCopy complete. Temp table row count: {0}", cmd.ExecuteScalar()); 
     cmd.CommandText = "TRUNCATE TABLE [dbo].[Net Weight Master Data]"; 
     cmd.ExecuteNonQuery(); 
     Console.WriteLine("Truncated NetWeightMasterDataTable"); 
    cmd.CommandText = "INSERT INTO [dbo].[Net Weight Master Data] 
([Unit UPC Base Item],[Production Line],[Preset Number],[Package Type], 
    [Weight Factor],[Piece],[Pcs Per Unit],[Upper Limit Unit], 
    [Upper Limit Factor],[Label Wt (g)],[Tare Wt (g)], 
    [Constant Tare Wt (g)],[Tare Variation Factor (g)], 
    [Pkg Length (mm)],[Film Product Code],[Film Width (mm)], 
    [Forming Tube (mm)],[Type of Jaws],[Last Updated], 
    [Comments]) SELECT Z.[Unit UPC Base Item],Z.[Production Line], 
    Z.[Preset Number],Z.[Package Type],Z.[Weight Factor], 
    Z.[Piece],Z.[Pcs Per Unit],Z.[Upper Limit Unit], 
    Z.[Upper Limit Factor],Z.[Label Wt (g)],Z.[Tare Wt (g)], 
    Z.[Constant Tare Wt (g)],Z.[Tare Variation Factor (g)], 
    Z.[Pkg Length (mm)],Z.[Film Product Code],Z.[Film Width (mm)], 
    Z.[Forming Tube (mm)],Z.[Type of Jaws],Z.[Last Updated], 
    Z.[Comments] FROM #NetWeightMasterData Z"; 
     Console.WriteLine(DateTime.Now.ToString()); 
     cmd.ExecuteNonQuery(); 
     cmd.CommandText = "SELECT COUNT(*) AS m FROM [dbo].[Net Weight Master Data]"; 
     Console.WriteLine("Inserted Records into NetWeightMasterData:{0}", cmd.ExecuteScalar()); 
    } 
    tran.Commit(); 
    Console.WriteLine("do you wann to insert NetWeightMasterData data into another plant please type y for yes and n for no"); 
    string answer = Console.ReadLine(); 
     if (answer == "y") 
     { 
     LoadNetWeightMasterData(); 
     } 
     else 
     { 
     LoadNetWeightTracking(); 
     } 
     } 
     } 
     } 

我Access表中有,但在我的SQL Server表中的一些空的日期,我让它允许空值,但我仍然得到错误

SQLDATETIME溢出必须是1753年1月1日和12 /间31/9999

我意识到,这个错误也出现在日期不是正确的格式,但我也检查了,这一切看起来不错,所以我还错过了什么?

回答

0
  1. 建议1:如果你想确保每一行是正确的SQL Server日期时间格式,你可以在你的数据表中写一个foreach它从ACCESSDB和检查数据填充后如果它小于1753/1/1 ...如果它是真的,则分配一个有效值(空或GETDATE())。
  2. 建议2:您可以使用System.Data.SqlTypes.SqlDateTime.MinValue属性更新c#中的数据行。 (看看这里:https://msdn.microsoft.com/en-us/library/system.data.sqltypes.sqldatetime.minvalue(v=vs.110).aspx
+0

感谢芽,而不是所有,我去访问,并做了排序最旧到最新,我很震惊,找到这个日期在列11/1/1414 :)所以我不得不用我可以使用的东西来替换一年,并且数据加载成功 – ExpertWannaBe

相关问题