使用带有SQL查询的ado.net时计算年龄?

时间:2011-11-02 17:11:33

标签: c# ado.net

这是我的选择

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

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

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

感谢您的帮助!

2 个答案:

答案 0 :(得分:5)

如果您只需要检索单个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注入 - 你绝对不希望这样!

答案 1 :(得分:2)

尝试将您的查询更改为:

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

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

这也假设你想要计算年的年龄。如果您希望它更精确,您可以将其更改为任何常量值而不是yy。查看上面DateDiff的参考链接,以显示所有可能的参数配置值。