Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将从excel读取的日期从年月日转换为年月日,然后再发送到数据库_C#_Asp.net_Sql_Sql Server_Date - Fatal编程技术网

C# 将从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

我正在将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 = 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");
    }