Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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超时异常_C#_Sql Server_Ado.net - Fatal编程技术网

C# SQL超时异常

C# SQL超时异常,c#,sql-server,ado.net,C#,Sql Server,Ado.net,为什么我的代码中会出现这种异常?我重新启动了服务器,更改了端口等,但一切都不正常 怎么了 DataTable dt = new DataTable(); SqlConnection con = new SqlConnection("server=localhost;user=armin;password=root;"); con.Open(); SqlCommand result = new SqlCommand( "SELECT userid FROM KDDData.dbo.us

为什么我的代码中会出现这种异常?我重新启动了服务器,更改了端口等,但一切都不正常

怎么了

DataTable dt = new DataTable();

SqlConnection con = new SqlConnection("server=localhost;user=armin;password=root;");
con.Open();

SqlCommand result = new SqlCommand(
    "SELECT userid FROM KDDData.dbo.userprofile order by userid", con);

SqlDataReader reader = result.ExecuteReader();
dt.Load(reader);

List<string> userids = new List<string>(dt.Rows.Count);

foreach (DataRow item in dt.Rows)
{
    userids.Add(item.ItemArray[0].ToString().Trim());
}

con.Close();

con = new SqlConnection("server=localhost;user=armin;password=root;");
con.Open();

foreach (string user in userids)
{
    DataTable temp = new DataTable();
    SqlCommand result1 = new SqlCommand(
    "select itemid from KDDTrain.dbo.train where userid=" + user, con);

    SqlDataReader reader1 = result1.ExecuteReader();

    if (!reader1.HasRows)
    {
        continue;
    }

    temp.Load(reader1);
}
DataTable dt=newdatatable();
SqlConnection con=newsqlconnection(“server=localhost;user=armin;password=root;”;
con.Open();
SqlCommand结果=新的SqlCommand(
“按用户ID从KDDData.dbo.userprofile中选择用户ID”,con);
SqlDataReader=result.ExecuteReader();
dt.负载(读卡器);
List userid=新列表(dt.Rows.Count);
foreach(数据行中的数据行项)
{
添加(item.ItemArray[0].ToString().Trim());
}
con.Close();
con=newsqlconnection(“server=localhost;user=armin;password=root;”;
con.Open();
foreach(userid中的字符串用户)
{
DataTable temp=新DataTable();
SqlCommand result1=新的SqlCommand(
“从KDDTrain.dbo.train中选择itemid,其中userid=“+user,con”);
SqlDataReader reader1=result1.ExecuteReader();
如果(!reader1.HasRows)
{
继续;
}
温度负载(读取器1);
}
第一个查询可以正常工作,但第二个查询不行。正如您所看到的,我甚至使用了一些其他的
SqlConnection
,但它仍然不起作用


注意:我正在使用的数据库至少有1亿条记录,我想这可能是一个问题。

在以下情况下处理您的读卡器:

foreach (DataRow item in dt.Rows)
{
    userids.Add(item.ItemArray[0].ToString().Trim()); 
} 
…并在温度加载后关闭连接(读取器1)。同时关闭读卡器1


而不是所有这些。。。干净的方法是使用初始化读卡器和连接。:)

您的连接字符串中出现了一些错误
我总是在MySql而不是SqlServer的连接字符串中看到
“server=localhost;user=armin;password=root”
,我将使用
“Data Source=(LOCAL);Integrated Security=SSPI”
或SqlServer的实例名。您确定第一个查询有效吗

但是,我认为您应该使用适当的using语句

DataTable dt = new DataTable(); 
using(SqlConnection con = new SqlConnection("server=localhost;user=armin;password=root;"))
{
    using(SqlCommand result = new SqlCommand(
            "SELECT userid FROM KDDData.dbo.userprofile order by userid", con))
    {
        con.Open(); 
        using(SqlDataReader reader = result.ExecuteReader())
        {
           dt.Load(reader); 
           List<string> userids = new List<string>(dt.Rows.Count); 
           foreach (DataRow item in dt.Rows) 
           { 
              userids.Add(item.ItemArray[0].ToString().Trim()); 
           }
        } 
        DataTable temp = new DataTable(); 
        foreach (string user in userids) 
        { 
            using(SqlCommand result1 = new SqlCommand( 
            "select itemid from KDDTrain.dbo.train where userid=" + user, con))
            {
                using(SqlDataReader reader1 = result1.ExecuteReader())
                {
                    if (!reader1.HasRows)   continue; 
                    temp.Load(reader1); 
                }
            } 
        } 
   }
DataTable dt=newdatatable();
使用(SqlConnection con=newsqlconnection(“server=localhost;user=armin;password=root;”)
{
使用(SqlCommand结果=新的SqlCommand)(
“按用户ID从KDDData.dbo.userprofile中选择用户ID”,con)
{
con.Open();
使用(SqlDataReader=result.ExecuteReader())
{
dt.负载(读卡器);
List userid=新列表(dt.Rows.Count);
foreach(数据行中的数据行项)
{ 
添加(item.ItemArray[0].ToString().Trim());
}
} 
DataTable temp=新DataTable();
foreach(userid中的字符串用户)
{ 
使用(SqlCommand result1=newsqlcommand(
“从KDDTrain.dbo.train中选择itemid,其中userid=“+user,con))
{
使用(SqlDataReader reader1=result1.ExecuteReader())
{
如果(!reader1.HasRows)继续;
温度负载(读取器1);
}
} 
} 
}

请插入此行

result1.CommandTimeout = 0;
在第二个查询的此行之前

SqlDataReader reader1 = result1.ExecuteReader();  

我猜您希望每个用户ID都有ItemID…那么为什么您要用与“temp”相同的名称来填充它?您从哪里得到异常?在打开第二个连接时?顺便说一句,在循环中创建的temp datatable中填充的数据将在第一次继续时被删除。@Steve在查询部分(读卡器),而不是开头。在foreach(dt.Rows中的DataRow项){userids.Add(item.ItemArray[0].ToString().Trim();}之后处理读取器,并在temp.Load(reader1)}之后关闭con,以及读取器1。。。而不是所有这些。。。干净的方法是使用初始化读卡器和连接:)您是否使用OLEDB连接?看看这个:你没有太注意代码,SqlDataReaders是不同的,它的连接是相同的。顺便说一下,我使用了一些其他的连接,但仍然不起作用。连接工作正常是ExecuteReader不起作用,此外,我使用的是using()语句,但必须删除它们,因为我认为它们可能会导致连接字符串再次出现问题。我比以前更确信,SqlServer无法使用这些语句。该字符串中还缺少初始目录/数据库部分。你怎么能联系到任何东西对我来说都是个谜。请看这个你一定是在跟我开玩笑,我告诉你它在工作,它的编译,连接和其他一切,我认为你应该再次检查sql连接。很抱歉让你不高兴,但这是我第一次看到针对SqlServer的连接语法。我很好奇,所以我用LinqPad对我的数据库进行了尝试,当然,你是对的,它是有效的。哦,很高兴你发现了问题。