Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL查询在SQLServerManagementStudio中工作,但不在ASP.Net应用程序中工作_C#_Sql_Asp.net_Sql Server_Vb.net - Fatal编程技术网

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
    M/d/yyyy
    (如2012年3月14日)
  • en GB
    dd/MM/yyyy
    (如2012年3月14日)
在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();

        }
    }
使用此代码:

 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上运行它。是的,您是对的。我实际上看到了服务器数据库的结果。