C# SQL查询在SQLServerManagementStudio中工作,但不在ASP.Net应用程序中工作
我在数据库中创建了一个视图以获得所需的结果。查询如下:C# SQL查询在SQLServerManagementStudio中工作,但不在ASP.Net应用程序中工作,c#,sql,asp.net,sql-server,vb.net,C#,Sql,Asp.net,Sql Server,Vb.net,我在数据库中创建了一个视图以获得所需的结果。查询如下: Select * from SignInEmployeeDetails where EmployeeID = 1 and CONVERT(DATE, LateComingDate) >= CONVERT(DATE, '04/02/2015') Protected Sub BindSignInDetails() Dim con As New SqlConnection(ConfigurationManager.Con
Select *
from SignInEmployeeDetails
where EmployeeID = 1
and CONVERT(DATE, LateComingDate) >= CONVERT(DATE, '04/02/2015')
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()
我试着在SQLServerManagementStudio中运行它,它执行得很好
但是当我在我的ASP.Net应用程序中包含这个查询时,我没有得到任何结果,但是当我调试并看到这个查询时,它与上面的相同。我的ASP.Net代码如下:
Select *
from SignInEmployeeDetails
where EmployeeID = 1
and CONVERT(DATE, LateComingDate) >= CONVERT(DATE, '04/02/2015')
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()
问题是什么?有人能帮我吗
编辑:
我已经更新了我的代码,包括参数化查询,如下所示
Select *
from SignInEmployeeDetails
where EmployeeID = 1
and CONVERT(DATE, LateComingDate) >= CONVERT(DATE, '04/02/2015')
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:
(如2012年3月14日)M/d/yyyy
- en GB:
(如2012年3月14日)dd/MM/yyyy
<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();
}
}
使用此代码:
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 Server使用
mm/dd/yyyy
格式
您电脑的日期时间格式似乎是dd/mm/yyyy
,您只需更改它,然后重试
你可以试试上面的方法。但是我通过这个设置解决了问题。我认为您的查询没有问题。检查数据库结果以了解确切日期。并确保您没有在sql management studio中使用本地数据库和服务器数据库。这将使您在了解结果时感到困惑。如何获取EmployeeID的值。ToString()EmployeeID是一个全局变量,我使用它从会话变量中分配EmployeeID。这不是问题所在。如前所述,我尝试调试代码以查看查询是什么,得到的结果与在SQL Management Studio中运行的查询相同,但我不明白为什么它在asp.net应用程序中不返回任何值。我希望您知道,您应该使用SQL参数,而不是串联SQL字符串。此代码易受SQL注入攻击。如果修改sql查询,将得到结果。我尝试在查询中删除日期比较,它返回了结果,但这不是我想要的。我希望还包括日期。我检查了dr.HasRows,但调试时它返回false。所以我认为这没有用。问题是,当sql管理研究中显示一行时,为什么它没有任何行?您可以在数据库中共享LateComingDate数据类型吗?LateComingDate的数据类型是nvarcharder Javed,这是不匹配的,您的数据类型是nvarchar,但是,您希望根据dateDear Kumar筛选国家,我尝试在sql management studio中运行查询,它返回一行,但为什么它不返回代码中的任何行?我甚至尝试将LateComingDate转换为Datetime,正如您在我的查询中所看到的那样,但没有成功。我尝试在我的web.config中添加全球化,但仍然没有成功。@Javed尝试将此
txtLateComingDate.Text.ToString()转换为
在您的代码中添加日期并使用断点,然后查看您的查询变成了什么。复制该文本并尝试在sql server上运行它。是的,您是对的。我实际上看到了服务器数据库的结果。