如果更改了系统日期时间格式,则在SQL Server中保存时出错

问题描述 投票:1回答:2

我使用C#app将数据从Excel文件导入SQL Server。我的工作表包含一些日期时间列。

无论我的系统日期时间设置为什么格式(dd/mm/yyyymm/dd/yyyy或任何其他格式)以及我的日期时间值在Excel工作表中的格式,我都可以在SQL Server中正确加载它而不会出现任何错误。目前,如果我的系统日期时间是mm/dd/yyyy,则保存数据,但如果我将系统格式更改为dd/mm/yyyy,则保存操作将失败。

保存功能:

public int InsertSetting(DataRow drow)
    {
        int Result = 0;

        try
        {

            OdbcParameter[] p = new OdbcParameter[9];
            p[0] = new OdbcParameter("@ID", drow["ID"].ToString().Trim());
            p[1] = new OdbcParameter("@ComID", drow["CompanyID"].ToString().DbNullIfNullOrEmpty());
            p[2] = new OdbcParameter("@Mod", drow["ModuleID"].ToString().DbNullIfNullOrEmpty());
            p[3] = new OdbcParameter("@Stat", drow["Status"].ToString());
            p[4] = new OdbcParameter("@EnterBy", drow["EnterBy"].ToString().DbNullIfNullOrEmpty());
            p[5] = new OdbcParameter("@EnterDate", (drow["EnterDate"].ToString() == "" || drow["EnterDate"].ToString() == "NULL") ? (object)DBNull.Value : drow["EnterDate"].ToString());
            p[6] = new OdbcParameter("@UpdateBy", drow["UpdateBy"].ToString().DbNullIfNullOrEmpty());
            p[7] = new OdbcParameter("@UpdateDate", (drow["UpdateDate"].ToString() == "" || drow["UpdateDate"].ToString() == "NULL") ? (object)DBNull.Value : drow["UpdateDate"].ToString());
            p[8] = new OdbcParameter("@Mode", 7);


            Result = //calling stored procedure to save data

        }
        catch (Exception ex)
        {
             MessageBox.Show(ex.Message, "InsertSetting()");


        }
        return Result;

    }

阅读enterdate并以mm/dd/yyyy格式更新。

我无法理解问题究竟是什么以及我与系统日期时间格式有什么关系。

c# sql sql-server excel
2个回答
0
投票

如果drow["EnterDate"]drow["UpdateDate"]是DateTime,您可以在ToString()中输入自定义格式。

为了通过ADO.net将日期保存到SQL Server中,虽然我承认它不是一种正式的方式,但我发现无论本地/服务器日期时间格式设置如何,将其格式化为ToString("yyyy-MM-dd HH:mm:ss")总是更安全。


0
投票

假设drow [“EnterDate”]是字符串,您应该在传递给SQL Server之前将日期参数转换为DateTime。如果第一部分是1或2位数,SQL Server将日期视为MM / DD / YYYY。或者,您可以将日期作为yyyyMMdd格式传递。

通过一些简化:

p[5] = new OdbcParameter("@EnterDate", !string.IsNullOrEmpty(drow["EnterDate"].ToString()) ? DateTime.Parse((string)drow["EnterDate"]) : DBNull.Value);

要么

p[5] = new OdbcParameter("@EnterDate", !string.IsNullOrEmpty(drow["EnterDate"].ToString) ? DateTime.Parse((string)drow["EnterDate"]).ToString("yyyyMMdd HH:mm:ss") : DBNull.Value);

如果drow [“EnterDate”]已经是DateTime的类型,那么;

p[5] = new OdbcParameter("@EnterDate", drow["EnterDate"] != DBNull.Value ? (DateTime)drow["EnterDate"] : DBNull.Value);

要么

p[5] = new OdbcParameter("@EnterDate", drow["EnterDate"] != DBNull.Value ? ((DateTime)drow["EnterDate"]).ToString("yyyyMMdd HH:mm:ss") : DBNull.Value);
© www.soinside.com 2019 - 2024. All rights reserved.