【发布时间】:2011-04-17 19:56:28
【问题描述】:
我正在使用以下代码从 MS SQL 数据库中获取所有数据记录,并尝试更新每条记录。该代码用于 WebService。问题是,如果我有 1000 条数据记录,代码运行良好,但现在我有 20000 条数据记录,并且代码首先返回超时。然后我将 cmd.CommandTimeout 设置为零以没有超时。现在,当我在 IE WebSvc 中调用该函数时,IE 窗口仍然是空白的,并且仍然尝试加载某些内容,但没有任何反应。仅更新了 150 条数据记录。
您知道问题可能出在哪里吗?代码不是最好的,那我应该改什么?
非常感谢! 世嘉
我的代码:
private string AddNewOrgBez()
{
try
{
SqlConnection sqlconn = new SqlConnection(this.connectionString);
SqlCommand cmd;
SqlDataReader reader;
sqlconn.Open();
cmd = new SqlCommand("SELECT * FROM dbo.mydata", sqlconn);
cmd.CommandTimeout = 0;
reader = cmd.ExecuteReader();
while (reader.Read())
{
// Felder holen
string okuerzel = reader["O_KURZ"].ToString();
string bezeichnung = reader["O_BEZ"].ToString();
string[] lines = CreateNewOrgBez(bezeichnung);
string sqlcmd = "UPDATE dbo.mydata SET WEB_OBEZ1 = '" + lines[0] + "', WEB_OBEZ2 = '" + lines[1] + "', WEB_OBEZ3 = '" + lines[2] + "' WHERE O_KURZ = '" + okuerzel + "'";
SqlConnection sqlconn2 = new SqlConnection(this.connectionString);
sqlconn2.Open();
SqlCommand cmd2 = new SqlCommand(sqlcmd, sqlconn2);
cmd2.CommandTimeout = 0;
cmd2.ExecuteNonQuery();
sqlconn2.Close();
}
reader.Close();
sqlconn.Close();
return "OK";
}
catch (Exception ex)
{
return ex.Message;
}
}
【问题讨论】:
-
不能在循环外创建 sqlconn2 吗?
-
CreateNewOrgBez是做什么的?您真的必须将所有这些都带回您的应用程序,然后通过在自己的事务中处理每个行来更新它吗? -
一点说明:该函数从数据库中获取一整套员工并更新他们的组织名称。 CreateNewOrgBez 函数根据现有名称创建新名称。然后将 lines[] 数组中的新名称更新为 WEB_OBEZ 字段...
标签: c# sql-server select