2

私は一括挿入を行っています:

// Get the data into the DataTable
//dtData = GetData(...);

// Create an object of SqlBulkCopy
SqlBulkCopy objSBC = new SqlBulkCopy(connection);
// Specify the destination table
objSBC.BulkCopyTimeout = 0;
objSBC.BatchSize = 10000;
objSBC.DestinationTableName = "QuickLabDump";
// Write the data to the SQL Server

objSBC.WriteToServer(QuickLabDump);

私が挿入している私のデータテーブルは次のようになります:

QuickLabDump = new DataTable();

QuickLabDump.Columns.Add("Time Collected", typeof(TimeSpan));
QuickLabDump.Columns.Add("Time Entered", typeof(TimeSpan));
QuickLabDump.Columns.Add("Time Completed", typeof(TimeSpan));
QuickLabDump.Columns.Add("Test Time", typeof(TimeSpan));

QuickLabDump.Columns.Add("Date Collected", typeof(DateTime));
QuickLabDump.Columns.Add("Date Entered", typeof(DateTime));
QuickLabDump.Columns.Add("Date Completed", typeof(DateTime));
QuickLabDump.Columns.Add("Test Date", typeof(DateTime));
......

C# (上記のコード) から一括挿入を実行すると、次のエラーが発生します。

The given value of type DateTime from the data source cannot be converted to type time of the specified target column.

typeof(DateTime)問題は、SQL Server 2008 テーブルに挿入していることだと思います。time(0)

挿入するデータのサンプルを次に示します。

6:50:00 AM
6:50:00 AM
6:50:00 AM
10:36:00 AM
4:45:00 PM
7:39:00 PM

質問: 上記の時間値が列に挿入されるように、データテーブル列を適切に定義するにはどうすればよいtime(0)ですか?

time(0) フィールドのデータベース テーブルに既に存在する値を次に示します。

14:57:00
14:58:00
14:58:00
14:57:00
10:49:00
13:31:00
14:02:00
14:13:00
14:20:00
14:56:00
15:00:00

これは私がデータを追加する方法ですDataTable

 public DataTable dt;
        public ReadFileIntoDataTable(string inputfile)
        {
            using (GenericParserAdapter parser = new GenericParserAdapter())
            {
                parser.SetDataSource(inputfile);

                char[] delimiters = new char[] { ',' };
                parser.ColumnDelimiter = delimiters[0];
                parser.FirstRowHasHeader = true;
                //parser.SkipDataRows = 10;
                parser.MaxBufferSize = 4096;
                //parser.MaxRows = 500;
                parser.TextQualifier = '\"';

                dt = parser.GetDataTable();   


            }
4

2 に答える 2

5

TimeSpanの代わりに使用してくださいDateTime。を使用してTimeSpan からを取得できます。DateTimeDateTime.TimeOfDay

タイプマッピングの詳細については、MSDNのSQLServerデータタイプマッピングのページを参照してください。

于 2012-05-18T21:52:27.443 に答える
0

データテーブルとSQLサーバーテーブルの間に明示的な列マッピングを作成しました:

objSBC.ColumnMappings.Add(new SqlBulkCopyColumnMapping("datatable column name","sql server column name"));

すべての列に.....そしてそれでうまくいきました!!!

于 2012-05-21T04:02:33.103 に答える