C# 将从excel读取的日期从年月日转换为年月日,然后再发送到数据库
我正在将Excel工作表导入SQL Server数据库。我可以上传数据,但Excel中有一列数据格式为C# 将从excel读取的日期从年月日转换为年月日,然后再发送到数据库,c#,asp.net,sql,sql-server,date,C#,Asp.net,Sql,Sql Server,Date,我正在将Excel工作表导入SQL Server数据库。我可以上传数据,但Excel中有一列数据格式为mm/dd/yyyy。我希望在将其发送到数据库之前将其转换为yyyy/mm/dd: DataTable dt7 = new DataTable(); dt7.Load(dr); DataRow[] ExcelRows = new DataRow[dt7.Rows.Count]; // Bulk Copy to SQL Server using (SqlBulkCopy bulkCopy = n
mm/dd/yyyy
。我希望在将其发送到数据库之前将其转换为yyyy/mm/dd
:
DataTable dt7 = new DataTable();
dt7.Load(dr);
DataRow[] ExcelRows = new DataRow[dt7.Rows.Count];
// Bulk Copy to SQL Server
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
{
bulkCopy.DestinationTableName = "ExcelTable";
dt7.Rows.CopyTo(ExcelRows, 0);
for (int i = 0; i < ExcelRows.Length; i++)
{
DateTime oldDate =Convert.ToDateTime(ExcelRows[i]["data"]).Date;
DateTime newDate = Convert.ToDateTime(oldDate).Date;
ExcelRows[i]["data"] = newDate.ToString("yyyy/MM/dd");
}
bulkCopy.WriteToServer(ExcelRows);
我尝试用
ExcelRows[I][1]
替换ExcelRows[I][1]
,但我得到了相同的错误。发生这种情况是因为ExcelRows[I][“data”]返回DBNull
发生这种情况时你应该处理好
if (ExcelRows[i]["data"] == DBNull.Value)
{
// Include any actions to perform if there is no date
}
else
{
DateTime oldDate = Convert.ToDateTime(ExcelRows[i]["data"]).Date;
DateTime newDate = Convert.ToDateTime(oldDate).Date;
ExcelRows[i]["data"] = newDate.ToString("yyyy/MM/dd");
}
首先:
DATETIME
在SQL Server中没有任何与之相关的格式-它只是一个8字节的二进制值。您只需确保导入代码可以将传入字符串解释为有效日期。其次:错误表示您正在读取一个DBNull
-例如,有一行没有该单元格的数据-您无法将DBNull
转换为任何内容-因此您需要检查…=DBNull.Value
在转换之前,为避免这些null,请复制粘贴您的代码,这些值现在将进入数据库。没有错误,但excel值:11/25/1999数据库:11/25/1999 12:00:00 AM:(另外,数据库表中的第一行是null,尽管它在Excel中不是null。出于某种奇怪的原因,表中的值是11/25/1999 12:00:00 AM,但当我使用select*from query查看表时,我得到了1999/11/25 00:00:00对不起,我之前没有看到您的注释。您是否设法解决了问题?您使用的数据库列类型是什么正在尝试插入?如果它是日期类型,那么它可能只是日期显示的格式。是的,它的日期时间我一直在绞尽脑汁,然后我注意到,当我查询它时,它给了我1999/11/25 00:00:00,所以可能是数据库在添加它,所以问题解决了,我想谢谢!
if (ExcelRows[i]["data"] == DBNull.Value)
{
// Include any actions to perform if there is no date
}
else
{
DateTime oldDate = Convert.ToDateTime(ExcelRows[i]["data"]).Date;
DateTime newDate = Convert.ToDateTime(oldDate).Date;
ExcelRows[i]["data"] = newDate.ToString("yyyy/MM/dd");
}