这是我的选择
using (SqlConnection con = new SqlConnection(dc.Con))
{
SqlDataAdapter da = new SqlDataAdapter(
"Select DateOfBirth FROM Patients WHERE HealthNumber='" + cmbHealthNumber.Text+ "'", con);
如何计算更改上述代码的客户年龄
我尝试但我从未解决过这个问题...
感谢您的帮助!
答案 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();
}
实际上没有必要为单个值SqlDataAdapter
和DataTable
或DataSet
解决所有问题......
另外:始终使用参数化查询! - 否例外。防止SQL注入 - 你绝对不希望这样!
答案 1 :(得分:2)
尝试将您的查询更改为:
Select datediff(yy, DateOfBirth, getdate()) FROM Patients WHERE HealthNumber = @HealthNumber
通过使用DateDiff方法,您可以非常轻松地在数据层上进行此计算。我还在那里放了一个变量@HealthNumber
,因为你正在借助SQL注入攻击。无论是否会发生这种情况,将值硬编码到SQL查询中都是不好的做法。
这也假设你想要计算年的年龄。如果您希望它更精确,您可以将其更改为任何常量值而不是yy
。查看上面DateDiff
的参考链接,以显示所有可能的参数配置值。