SQL 查询在 SQL Server Management Studio 中有效,但在 ASP.Net 应用程序中无效
SQL query works in SQL Server Management Studio but not from ASP.Net application
我在我的数据库中创建了一个视图以获得所需的结果。查询如下,
Select *
from SignInEmployeeDetails
where EmployeeID = 1
and CONVERT(DATE, LateComingDate) >= CONVERT(DATE, '04/02/2015')
我在 SQL Server Management Studio 中试过 运行 它并且运行良好。
但是当我在我的 ASP.Net 应用程序中包含此查询时,我没有得到任何结果,但是当我调试并看到查询时,它与上面的相同。我的ASP.Net代码如下,
Protected Sub BindSignInDetails()
Dim con As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionStringName").ToString())
Dim comm As New SqlCommand(
"Select * from SignInEmployeeDetails where EmployeeID = " +
EmployeeID.ToString() +
" and CONVERT(DATE, LateComingDate) >= CONVERT(DATE, '" +
txtLateComingDate.Text.ToString() + "')", con)
con.Open()
Dim dr As SqlDataReader = comm.ExecuteReader()
If dr.Read() Then
txtFirstTimeIn.Text = dr("FirstTimeIn").ToString()
txtLateTimeDuration.Text = dr("LateTimeDuration").ToString()
End If
dr.Close()
con.Close()
End Sub
可能是什么问题?谁能帮我解决这个问题?
已编辑:
我更新了我的代码以包含如下参数化查询,
cmd.Connection = con
cmd.CommandType = CommandType.Text
'representing type of command
cmd.CommandText = "Select * from SignInEmployeeDetails where EmployeeID = @EmployeeID and LateComingDate = @LateComingDate"
'adding parameters with value
cmd.Parameters.AddWithValue("@EmployeeID", EmployeeID.ToString())
cmd.Parameters.AddWithValue("@LateComingDate", txtLateComingDate.Text.ToString())
con.Open()
Dim dr As SqlDataReader = cmd.ExecuteReader()
If dr.Read() Then
txtFirstTimeIn.Text = dr("FirstTimeIn").ToString()
txtLateTimeDuration.Text = dr("LateTimeDuration").ToString()
End If
dr.Close()
con.Close()
但我仍然没有得到任何结果。有什么问题?
问题可能是全球化问题,或者您可以说日期格式。您可以在 web.config 文件或单个文件中设置它。以下是示例
- en-US:
M/d/yyyy
(例如 3/14/2012)
- zh-CN:
dd/MM/yyyy
(例如 14/03/2012)
在web.config
<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" uiCulture="en-GB" culture="en-GB" />
尽管有这段代码:
If dr.Read() Then
txtFirstTimeIn.Text = dr("FirstTimeIn").ToString()
txtLateTimeDuration.Text = dr("LateTimeDuration").ToString()
End If
使用此代码:
if (dr.HasRows)
{
while (dr.Read())
{
txtFirstTimeIn.Text = dr["FirstTimeIn"].ToString();
txtLateTimeDuration.Text = dr["LateTimeDuration"].ToString();
}
}
这没什么,只是你的日期时间格式问题。默认 SQL 服务器使用 mm/dd/yyyy
格式。
你电脑的日期时间格式好像是dd/mm/yyyy
,你改一下再试试
你可以按照上面的方法试试。但是我通过这个设置解决了。
我认为你的查询没有问题。检查数据库结果以获取确切日期。并确保您没有在 sql management studio 中使用本地数据库和服务器数据库。这会让你在知道结果时感到困惑。
我在我的数据库中创建了一个视图以获得所需的结果。查询如下,
Select *
from SignInEmployeeDetails
where EmployeeID = 1
and CONVERT(DATE, LateComingDate) >= CONVERT(DATE, '04/02/2015')
我在 SQL Server Management Studio 中试过 运行 它并且运行良好。
但是当我在我的 ASP.Net 应用程序中包含此查询时,我没有得到任何结果,但是当我调试并看到查询时,它与上面的相同。我的ASP.Net代码如下,
Protected Sub BindSignInDetails()
Dim con As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionStringName").ToString())
Dim comm As New SqlCommand(
"Select * from SignInEmployeeDetails where EmployeeID = " +
EmployeeID.ToString() +
" and CONVERT(DATE, LateComingDate) >= CONVERT(DATE, '" +
txtLateComingDate.Text.ToString() + "')", con)
con.Open()
Dim dr As SqlDataReader = comm.ExecuteReader()
If dr.Read() Then
txtFirstTimeIn.Text = dr("FirstTimeIn").ToString()
txtLateTimeDuration.Text = dr("LateTimeDuration").ToString()
End If
dr.Close()
con.Close()
End Sub
可能是什么问题?谁能帮我解决这个问题?
已编辑:
我更新了我的代码以包含如下参数化查询,
cmd.Connection = con
cmd.CommandType = CommandType.Text
'representing type of command
cmd.CommandText = "Select * from SignInEmployeeDetails where EmployeeID = @EmployeeID and LateComingDate = @LateComingDate"
'adding parameters with value
cmd.Parameters.AddWithValue("@EmployeeID", EmployeeID.ToString())
cmd.Parameters.AddWithValue("@LateComingDate", txtLateComingDate.Text.ToString())
con.Open()
Dim dr As SqlDataReader = cmd.ExecuteReader()
If dr.Read() Then
txtFirstTimeIn.Text = dr("FirstTimeIn").ToString()
txtLateTimeDuration.Text = dr("LateTimeDuration").ToString()
End If
dr.Close()
con.Close()
但我仍然没有得到任何结果。有什么问题?
问题可能是全球化问题,或者您可以说日期格式。您可以在 web.config 文件或单个文件中设置它。以下是示例
- en-US:
M/d/yyyy
(例如 3/14/2012) - zh-CN:
dd/MM/yyyy
(例如 14/03/2012)
在web.config
<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" uiCulture="en-GB" culture="en-GB" />
尽管有这段代码:
If dr.Read() Then
txtFirstTimeIn.Text = dr("FirstTimeIn").ToString()
txtLateTimeDuration.Text = dr("LateTimeDuration").ToString()
End If
使用此代码:
if (dr.HasRows)
{
while (dr.Read())
{
txtFirstTimeIn.Text = dr["FirstTimeIn"].ToString();
txtLateTimeDuration.Text = dr["LateTimeDuration"].ToString();
}
}
这没什么,只是你的日期时间格式问题。默认 SQL 服务器使用 mm/dd/yyyy
格式。
你电脑的日期时间格式好像是dd/mm/yyyy
,你改一下再试试
你可以按照上面的方法试试。但是我通过这个设置解决了。
我认为你的查询没有问题。检查数据库结果以获取确切日期。并确保您没有在 sql management studio 中使用本地数据库和服务器数据库。这会让你在知道结果时感到困惑。