我正在使用for循环执行一个过程。循环限制为1000或更高。代码和过程运行良好,但有时我得到一个错误
从服务器接收结果时发生传输级别错误(提供程序:TCP提供程序,错误:0 - 信号量超时期限已过期。)
这是我的数据
public string updateselstatus(int sid, string[] trnasId, string[] resparr)
{
string ret = "";
try
{
//con.Open();
for (int j = 0; j < trnasId.Length; j++)
{
con.Open();
string a = trnasId[j].Trim().ToString();
string b = resparr[j].Trim().ToString();
SqlCommand cmd = new SqlCommand("OIB_updateselstatus", con);
cmd.Parameters.Clear();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@sid", sid);
cmd.Parameters.AddWithValue("@smsid", trnasId[j].Trim().ToString());
cmd.Parameters.AddWithValue("@status", resparr[j].Trim().ToString());
cmd.ExecuteNonQuery();
con.Close();
}
return ret;
}
catch (Exception ex)
{
con.Close();
ret = ex.Message.ToString();
return ret;
}
//finally { con.Close(); }
}
我的程序是
ALTER proc [dbo].[OIB_updateselstatus]
@status varchar(50),@smsid varchar(100),@sid int
as
begin
update OIB_SmsHistory set IBH_Status=@status where IBH_Smsid=@smsid and IBH_M_idno=@sid
end
是我的代码或查询中的任何错误。我怎么能超过这次错误。这取决于我的网速
答案 0 :(得分:0)
它与你的proc无关,它不是SQL Server错误。
网络库报告此错误,请在此处查看详细信息: The semaphore timeout period has expired
答案 1 :(得分:0)
我不知道它的正确与否。当我改变我的代码时,我可以逃避超时错误
旧代码
public string updateselstatus(int sid, string[] trnasId, string[] resparr)
{
string ret = "";
try
{
//con.Open();
for (int j = 0; j < trnasId.Length; j++)
{
con.Open();
string a = trnasId[j].Trim().ToString();
string b = resparr[j].Trim().ToString();
SqlCommand cmd = new SqlCommand("OIB_updateselstatus", con);
cmd.Parameters.Clear();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@sid", sid);
cmd.Parameters.AddWithValue("@smsid", trnasId[j].Trim().ToString());
cmd.Parameters.AddWithValue("@status", resparr[j].Trim().ToString());
cmd.ExecuteNonQuery();
con.Close();
}
return ret;
}
catch (Exception ex)
{
con.Close();
ret = ex.Message.ToString();
return ret;
}
//finally { con.Close(); }
}
新代码
public string updateselstatus(int sid, string[] trnasId, string[] resparr)
{
string ret = "";
try
{
for (int j = 0; j < trnasId.Length; j++)
{
//string a = trnasId[j].Trim().ToString();
//string b = resparr[j].Trim().ToString();
SqlCommand cmd = new SqlCommand("OIB_updateselstatus", con);
cmd.Parameters.Clear();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@sid", sid);
cmd.Parameters.AddWithValue("@smsid", trnasId[j].Trim().ToString());
cmd.Parameters.AddWithValue("@status", resparr[j].Trim().ToString());
// New Code
adp.SelectCommand = cmd;
DataTable dt = new DataTable();
try
{
adp.Fill(dt);
}
catch (Exception exp)
{
ret = exp.Message.ToString();
return ret;
}
}
return ret;
}
catch (Exception ex)
{
ret = ex.Message.ToString();
return ret;
}
}
我将cmd.ExecuteNonQuery()更改为adp.Fill(dt)以及与此相关的更改。我不知道是对还是错。但对我来说工作正常