gpt4 book ai didi

c# - 如果文本框为空,则在 SQL 中将日期时间字段设置为 NULL

转载 作者:太空狗 更新时间:2023-10-30 00:07:48 25 4
gpt4 key购买 nike

如果文本框为空,我试图将 SQL 表中的日期时间字段设置为 NULL,我似乎无法让它工作。

        string EndDate = "";
if (String.IsNullOrEmpty(EndDateTxtBox.Text.Trim()))
{
EndDate = null;
}
else
{
EndDate = EndDateTxtBox.Text;
}

var sql = String.Format(@"UPDATE Test SET StartDate='{0}',
EndDate='{1}' WHERE ID = '{2}'",
StartDateTxtBox.Text, EndDate, id);

当我这样做并放置一个断点时,我得到了“var sql”:

"UPDATE Test SET StartDate='5/23/2013', EndDate=" WHERE ID = '19'"

我尝试从 sql 字符串中删除 ' 但那也不起作用。有什么建议吗?

编辑:我理解防止 SQL 注入(inject)的重要性,但这是我内部 Web 服务器上的一个页面,仅供我使用,不向公众公开。这是为了帮助我跟踪个人事务。

最佳答案

参数化。

首先,您应该将 UI 代码从数据库代码中移开,这样当它到达数据库附近的任何地方时,我们就已经正确键入了数据。例如:

void UpdateDates(int id, DateTime startDate, DateTime? endDate) {...}

并把你想要的任何Parse 等代码放在调用者处——而不是靠近数据库。现在我们需要实现它:

void UpdateDates(int id, DateTime startDate, DateTime? endDate) {
//... where-ever cmd comes from, etc
cmd.CommandText =
"update Test set StartDate=@start, EndDate=@end where ID = @id";
cmd.Parameters.AddWithValue("id", id);
cmd.Parameters.AddWithValue("start", startDate);
cmd.Parameters.AddWithValue("end", (object)endDate ?? DBNull.Value);
cmd.ExecuteNonQuery();
// ... cleanup etc
}

或者使用像“dapper”这样的工具:

void UpdateDates(int id, DateTime startDate, EndDate? endDate) {
//... where-ever connection comes from, etc
connection.Execute(
"update Test set StartDate=@start, EndDate=@end where ID = @id",
new { id, start = startDate, end = endDate}); // painfully easy
// ... cleanup etc
}

关于c# - 如果文本框为空,则在 SQL 中将日期时间字段设置为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17027116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com