C# 将DataTable中的日期列导入sql server之前,将其转换为所需格式
我正在将excel工作表导入sql server db表,该表由 id |数据,实际日期为mm/dd/yyyy 我可以将数据导入数据库表,但我希望excel工作表的datadate列在导入sql server之前转换为yyyy/mm/dd格式。以下是我导入excel工作表的代码:C# 将DataTable中的日期列导入sql server之前,将其转换为所需格式,c#,asp.net,sql,sql-server,C#,Asp.net,Sql,Sql Server,我正在将excel工作表导入sql server db表,该表由 id |数据,实际日期为mm/dd/yyyy 我可以将数据导入数据库表,但我希望excel工作表的datadate列在导入sql server之前转换为yyyy/mm/dd格式。以下是我导入excel工作表的代码: DataTable dt7 = new DataTable(); dt7.Load(dr); // Bulk Copy to SQL Server u
DataTable dt7 = new DataTable();
dt7.Load(dr);
// Bulk Copy to SQL Server
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
{
bulkCopy.DestinationTableName = "ExcelTable";
bulkCopy.WriteToServer(dt7);
}
dr.Close();
我找到了一段将mm/dd/yyyy转换为yyyy/mm/dd的代码:
string a = "12/20/2012";
DateTime dt = Convert.ToDateTime(a);
string st = dt.ToString("yyyy/MM/dd");
Label1.Text = a;
Label2.Text = st;
但是我不知道如何在我的代码中实现它。我是一个完全的新手,所以您可能需要用代码解释:您必须从DataTable中检索所有数据行。选择日期列,修改它,然后将其放回
DataRow[] ExcelRows;
ExcelDataTable.Rows.CopyTo(ExcelRows,0);
For(int i=0;i<ExcelRows.Length;i++)//i represents the row
{
var oldDate=ExcelRows [i]["DateColumn"].ToString();
var newDate=Convert.ToDateTime(oldDate);
ExcelRows [i]["DateColumn"] = newDate.ToString("yyyy/MM/dd");
}
bulkCopy.WriteToServer(ExcelRows);
试试这个:
Imports System.Data
Imports System.Data.OleDb
Imports System.Data.SqlClient
Imports System.Web.Configuration
//Declare Variables - Edit these based on your particular situation
Dim sSQLTable As String = "TempTableForExcelImport"
Dim sExcelFileName As String = "myExcelFile.xls"
Dim sWorkbook As String = "[WorkbookName$]"
//Create our connection strings
Dim sExcelConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(sExcelFileName) & ";Extended Properties=""Excel 8.0;HDR=YES;"""
Dim sSqlConnectionString As String = WebConfigurationManager.ConnectionStrings("MyConnectionString").ToString
//Series of commands to bulk copy data from the excel file into our SQL table
Dim OleDbConn As OleDbConnection = New OleDbConnection(sExcelConnectionString)
Dim OleDbCmd As OleDbCommand = New OleDbCommand(("SELECT * FROM " & sWorkbook), OleDbConn)
OleDbConn.Open()
Dim dr As OleDbDataReader = OleDbCmd.ExecuteReader()
Using bulkCopy As New System.Data.SqlClient.SqlBulkCopy(con)
bulkCopy.DestinationTableName = "tblExcel"
//Define ColumnMappings: source(Excel) --destination(DB Table column)
bulkCopy.ColumnMappings.Add("col1", "col1")
bulkCopy.ColumnMappings.Add("col2", "col2")
:
:
bulkCopy.ColumnMappings.Add("col2", ExcelRows [i]["DateColumn"].ToString("yyyy/MM/dd")) //This is for date
bulkCopy.WriteToServer(dr)
End Using
bulkCopy.WriteToServer(dr)
OleDbConn.Close()
ExcelDataTable在我的例子中代表dt7,对吗?我用dt7替换了它,但它的所有red不能隐式地将类型'System.Data.DataRowCollection转换为System.Data.Datarows[]错误,DataRow[]ExcelRows=new DataRow;CS0122:“System.Data.DataRow.DataRowSystem.Data.DataRowBuilder”由于其保护级别而不可访问。我的excel工作表如下所示:id | datawhich is date您错误地声明数组匹配:DataRow[]ExcelRows=新DataRow[ExcelDataTable.Rows.Count];