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对我的数据库进行了尝试,当然,你是对的,它是有效的。哦,很高兴你发现了问题。