タイトルのように、私はインポートできるプログラム(および将来のプログラムで使用できる一般的なメソッド)を作成しようとしていますExcelシートのすべての情報をSQLのテーブルに格納します。C#でExcelからSQLにシートを読み込むときに、DateTime列の時間が失われる
メソッドが実行され、すべてのデータがSQLテーブルに格納されます。このテーブルは、この時点までに必要なすべての機能を備えています。しかし、実行する必要がある新しいレポートでは、ExcelのDATETIME列でTIMEが失われることがわかりました。
たとえば、Excelのセルの値が7/26/2016 08:54:32の場合、代わりに7/26/2016 00:00:00の値がSQLテーブルに保持されます。 SQL Server Management Studioに含まれている手動インポート/エクスポートウィザードを使用すると、datetimeが正しくインポートされ、両方の値が保持されます。
static bool ImportDataFromExcel(string excelFilePath, string excelSheet, string sqlTable)
{
//make sure the sheet name is correct
string myExcelDataQuery = "select * from [" + excelSheet + "]";
if (File.Exists(excelFilePath))
{
try
{
//create our connection strings
string sExcelConnectionString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=No;IMEX=1;'", excelFilePath);
string sSqlConnectionString = "Data Source=Server;Initial Catalog=Database;Integrated Security=true";
//execute query to erase data from destination table
string sClearSql = "delete from " + sqlTable;
SqlConnection sqlConn = new SqlConnection(sSqlConnectionString);
SqlCommand sqlCMD = new SqlCommand(sClearSql, sqlConn);
sqlConn.Open();
sqlCMD.CommandTimeout = 80000;
sqlCMD.ExecuteNonQuery();
sqlConn.Close();
//series of commands to bulk copy data from the excel file into our sql table
OleDbConnection oleDbConn = new OleDbConnection(sExcelConnectionString);
OleDbCommand oleDbCmd = new OleDbCommand(myExcelDataQuery, oleDbConn);
oleDbConn.Open();
oleDbCmd.CommandTimeout = 60000;
OleDbDataReader dr = oleDbCmd.ExecuteReader();
SqlBulkCopy bulkCopy = new SqlBulkCopy(sSqlConnectionString);
bulkCopy.BulkCopyTimeout = 60000;
bulkCopy.DestinationTableName = sqlTable;
while (dr.Read())
{
bulkCopy.WriteToServer(dr);
}
dr.Close();
oleDbConn.Close();
return true;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return false;
}
}
return true;
}
あなたがたのうち、Excelからテーブルをインポートするために使用するには、この作業を取得する方法の、または別の方法の任意のアイデアを持っていますか:ここで
は、私が使用していますメソッドのコードですプログラムでC#でSQLに?
テーブルであなたの列の型は何ですか?日時/日付? –
DateTime、手動インポート/エクスポートウィザードを使用してデータをインポートすると、日付と時刻の両方の値が正しく維持されます –
columnmappings 'bulkCopy.ColumnMappings.Add(" Excelfield "、" DBfield ");' –