You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从字符转换日期和/或时间失败,求Excel转数据库字段的替代方法

解决“从字符转换日期和/或时间时失败”的SQL插入问题

你遇到的问题根源在于直接拼接SQL字符串:当你把DateTime/TimeSpan转成字符串再拼进SQL时,日期时间的格式可能和数据库(看起来是SQL Server)期望的格式不匹配,而且这种写法还存在严重的SQL注入风险。

最可靠的解决方式是使用参数化查询,让数据库直接处理强类型数据,完全避免字符串转换的问题。下面是具体的实现示例(假设你用的是SQL Server和System.Data.SqlClient):

// 假设你已经初始化了有效的SqlConnection对象conn
string query = @"INSERT INTO Réception_camions(
                    [Date d'arrivée], 
                    [heure d'arrivée], 
                    Poids_cam, 
                    Id_cam, 
                    Id_qualité
                ) VALUES(
                    @DateArrivee, 
                    @HeureArrivee, 
                    @PoidsCam, 
                    @IdCam, 
                    @IdQualite
                )";

using (SqlCommand cmd = new SqlCommand(query, conn))
{
    // 先验证并转换Excel中的值(避免Parse失败抛出异常)
    if (!DateTime.TryParse(ds.Tables[0].Rows[i][0].ToString(), out DateTime dateArrivee))
    {
        // 这里可以添加错误处理逻辑,比如记录日志、跳过当前行
        Console.WriteLine($"第{i}行的日期格式无效");
        continue;
    }

    if (!TimeSpan.TryParse(ds.Tables[0].Rows[i][1].ToString(), out TimeSpan heureArrivee))
    {
        Console.WriteLine($"第{i}行的时间格式无效");
        continue;
    }

    // 添加参数,直接传入强类型值,无需手动转字符串
    cmd.Parameters.AddWithValue("@DateArrivee", dateArrivee);
    cmd.Parameters.AddWithValue("@HeureArrivee", heureArrivee);
    cmd.Parameters.AddWithValue("@PoidsCam", ds.Tables[0].Rows[i][2]);
    cmd.Parameters.AddWithValue("@IdCam", ds.Tables[0].Rows[i][3]);
    cmd.Parameters.AddWithValue("@IdQualite", ds.Tables[0].Rows[i][4]);

    // 执行插入操作
    cmd.ExecuteNonQuery();
}

为什么这种方式更好?

  • 避免类型转换错误:参数化查询会让数据库直接识别DateTime/TimeSpan类型,不需要依赖字符串格式的兼容性,彻底解决“从字符转换日期和/或时间时失败”的问题。
  • 防止SQL注入:直接拼接字符串是SQL注入的重灾区,参数化查询能完全规避这个风险,让你的代码更安全。
  • 更易维护:参数名清晰对应字段,后期修改字段或逻辑时更直观。

如果你的数据库不是SQL Server,只需要把SqlCommand换成对应数据库的命令类(比如MySqlCommand、OracleCommand),参数化的逻辑是通用的。

内容的提问来源于stack exchange,提问作者M.LOOK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:51:58