【发布时间】:2015-07-08 09:18:32
【问题描述】:
当我使用以下方法将 lastImportedDate(dd-mm-yyyy) 添加到 sql 服务器时,一切都很好。在数据库中,日期是 yyyy-mm-dd
但是在切换日期和月份的同一台服务器上添加 lastImportedDate(dd-mm-yyyy) 与不同的电脑。在数据库中,日期是 yyyy-dd-mm。
internal static void insertSelloutSales(string CustomerID, string type, DateTime lastImported, string periodStart, string periodEnd)
{
// Create SQL connection #connection
SqlConnection sqlConnection1 = new SqlConnection(Connection.connectionString());
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
string periodstartQuery = periodStart;
string periodEndQuery = periodEnd;
// Create query with values and execute query
if (!periodStart.Equals("NULL"))
{
periodstartQuery = " '" + periodStart + "'";
}
if (!periodEnd.Equals("NULL"))
{
periodEndQuery = " '" + periodEnd + "'";
}
cmd.CommandText = "Insert into CarsSellout (CustomerID, type, lastImportedDate, PeriodStart, PeriodEnd) VALUES ('" + CustomerID + "', '" + type + "', '" + lastImported + "', " + periodstartQuery + ", " + periodEndQuery + ")";
cmd.Connection = sqlConnection1;
sqlConnection1.Open();
cmd.ExecuteNonQuery();
sqlConnection1.Close();
}
请注意,电脑上的日期设置都设置为 dd-mm-yyyy。
如果您需要更多信息,请添加评论!
在这种情况下会出现什么问题?
【问题讨论】:
-
in database the date is yyyy-dd-mm是什么意思? -
你的方法
periodStart和periodEnd的参数是字符串。更改为datetime。还将数据库中的列类型从varchar更改为datetime。 -
a) 您的数据应该作为日期字段而不是文本存储在数据库中; b) 请使用参数化 SQL。它可以很好地解决这个问题,它还可以保护您免受 SQL 注入攻击。永远,永远,永远不要像这样构建 SQL。
-
日期格式是文化敏感的。尝试使用特定的 CultureInfo,例如 en-US 或 Invariant。另一种选择是使用 ToString("yyyyMMdd") 等明确格式化您的日期。
-
@SvenL:完全没有理由使用字符串格式,IMO。
标签: c# sql-server date