C# Visual Studio Windows应用程序,SQL查询挂起,然后不返回任何内容

C# Visual Studio Windows应用程序,SQL查询挂起,然后不返回任何内容,c#,visual-studio,sqlcommand,dataview,sqldataadapter,C#,Visual Studio,Sqlcommand,Dataview,Sqldataadapter,我正在用VS(C#)开发一个windows应用程序,我遇到了一个问题。我执行的命令之一是SQL Server中的存储过程。通常,当我执行该过程时,大约需要7-12秒并返回一个结果。偶尔我执行这个命令,它会挂起30-50秒,并返回一个空行集(当应该有结果时)。没有超时错误,它似乎只是放弃并返回空白结果 这是另一个有趣的消息。。。这个新的应用程序是基于一个旧程序(我没有源代码)的,它执行相同的SQL过程。旧程序偶尔也会挂起更长的时间,但它不会在大约50秒后“放弃”。它会等待直到得到结果,即使有时需要

我正在用VS(C#)开发一个windows应用程序,我遇到了一个问题。我执行的命令之一是SQL Server中的存储过程。通常,当我执行该过程时,大约需要7-12秒并返回一个结果。偶尔我执行这个命令,它会挂起30-50秒,并返回一个空行集(当应该有结果时)。没有超时错误,它似乎只是放弃并返回空白结果

这是另一个有趣的消息。。。这个新的应用程序是基于一个旧程序(我没有源代码)的,它执行相同的SQL过程。旧程序偶尔也会挂起更长的时间,但它不会在大约50秒后“放弃”。它会等待直到得到结果,即使有时需要更长的时间

我在SQL Server方面有丰富的经验,并且相信最终结果是正确的(凭据、权限、SQL代码本身等等)。我觉得在VisualStudio中缺少了某种属性或东西,这些属性或东西改变了它处理SQL端的方式。下面是我在VS中所做的操作。SQL过程本质上是查询一个表以获取一些参数,然后执行xp_cmdshell命令来搜索文件服务器中的文档,并返回找到的文档列表

//Search for  documents
    private void search(string item)
    {

        DataSet ptDataset = new DataSet();
        using (var cn = new SqlConnection("Data Source=ServerName;Initial Catalog=Database;User ID=myLogin;Password=myPassword")) //
        {
            cn.Open();

            DataView myDataView = new DataView();
            try
            {
                SqlCommand cmd = new SqlCommand("FindItemDrawings", cn); 
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@item", item);

                SqlDataAdapter adapter = new SqlDataAdapter(cmd);

                adapter.Fill(ptDataset);
                myDataView = ptDataset.Tables[0].DefaultView;

                dataGridView1.DataSource = myDataView;

                cn.Close();

            }
            catch (SqlException e)
            {
                Console.WriteLine(e.ToString());
                return;
            }
        }

    }

我需要弄清楚为什么我没有得到结果,这样我才能解决这个问题。我对C#/visualstudio还很陌生,所以我想我只是缺少了一些可以帮助我解决问题的属性或设置,但在我所有的搜索过程中,我总是遇到麻烦。任何帮助或指导都将不胜感激

使用Sql探查器检查Sql Server端发生的情况,另一个路径可能会增加CommandTimeout。但是,在服务器上进行某种类型的文件系统交互可能会导致所有可能的情况,如文件访问权限问题、与其他程序锁定、服务器繁忙等。您没有设置SQL连接的超时。因此,如果您有一个比默认查询时间长的查询,它将超时并且不返回任何数据——尽管您应该将异常记录到您的控制台中。在填充适配器之前,添加此
cmd.CommandTimeout=3000(根据您的需要进行调整,如果它仍然超时,请继续向上跳转此值,直到它不再超时)。话虽如此,听起来您可能想看看正在调用的SQL。听起来它可能需要一些调整来提高性能。我可以调整超时…如果是这样的话,我会预料到一个错误。SQL很好,速度慢是由文件系统搜索引起的,这取决于文件夹/结构。它可能需要几秒钟。请提供存储过程代码“执行xp_cmdshell命令搜索文件服务器中的文档并返回找到的文档列表”。这样我们就可以查看并提出建议,如适用。