繁体   English   中英

在将ado.net与SQL查询一起使用时计算年龄?

[英]Calculate age when using ado.net with a sql query?

这是我的选择

using (SqlConnection con = new SqlConnection(dc.Con))
{
    SqlDataAdapter da = new SqlDataAdapter(
            "Select DateOfBirth FROM Patients WHERE HealthNumber='" + cmbHealthNumber.Text+ "'", con);

如何计算更改以上代码的客户年龄

我尝试过,但我从未解决过这个问题...

感谢您的帮助!

如果只需要检索一个DateTime ,为什么不使用:

string sqlStmt = "SELECT DateOfBirth FROM dbo.Patients WHERE HealthNumber = @No";

using (SqlConnection con = new SqlConnection(dc.Con))
using (SqlCommand cmd = new SqlCommand(sqlStmt, con))
{
   cmd.Parameters.Add("@No", SqlDbType.VarChar, 20).Value = cmbHealthNumber.Text.Trim();

   con.Open();
   var result = cmd.ExecuteScalar();       
   DateTime dateOfBirth = Convert.ToDateTime(result);
   con.Close();
}

确实没有必要为单个值而拥有SqlDataAdapterDataTableDataSet所有麻烦。

另外: 始终使用参数化查询! - 没有例外。 防止SQL注入-您绝对不希望这样做!

尝试将查询更改为此:

Select datediff(yy, DateOfBirth, getdate()) FROM Patients WHERE HealthNumber = @HealthNumber

通过使用DateDiff方法,您可以轻松地在数据层上进行此计算。 我还在其中放置了一个变量@HealthNumber ,因为您正@HealthNumber进行SQL注入攻击。 无论是否会发生,将值硬编码到SQL查询中都是不好的做法。

这也假设您要计算以为单位的年龄。 如果要更精确,则可以将其更改为任何恒定值,而不是yy 查看上面有关DateDiff的参考链接,以向您显示所有可能的参数配置值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM