gpt4 book ai didi

c# - SQL 代码超时

转载 作者:太空宇宙 更新时间:2023-11-03 21:57:59 24 4
gpt4 key购买 nike

我的 SQL 代码将 10,000 条记录从列表插入到表中。如果记录已经存在,它会更新一些字段。

目前,除非我限制要处理的记录数量,否则它需要超过 10 分钟并超时。我的代码中有什么我可以做的来解决这个问题。

   foreach(RMSResponse rmsObj in rmsList) {
try {
string connectionString = @"server=localhost\sqlexpress;" + "Trusted_Connection=yes;" + "database=MyDB; " + "connection timeout=30";

SqlConnection conn = new SqlConnection(connectionString);
conn.Open();

string str = "";
str += "SELECT * ";
str += "FROM RMSResponse ";
str += "WHERE LeadID = @RecruitID";
int LeadID;
Boolean IsPositive = true;

SqlCommand selectCommand = new SqlCommand(str, conn);
selectCommand.CommandType = CommandType.Text;
selectCommand.Parameters.Add(new SqlParameter("@RecruitID", rmsObj.RecruitID));
SqlDataReader sqlDataReader = selectCommand.ExecuteReader();
bool hasRows = sqlDataReader.HasRows;

while (sqlDataReader.Read()) {
LeadID = sqlDataReader.GetInt32(1);
IsPositive = sqlDataReader.GetBoolean(2);
IsPositive = (IsPositive == true) ? false : true;
Console.WriteLine("Lead ID: " + LeadID + " IsPositive: " + IsPositive);
}

sqlDataReader.Close();

if (hasRows) {
SqlCommand updateCommand = new SqlCommand("UPDATE RMSResponse set IsPositive=@IsPositive, OptOutDate=@OptOutDate where LeadID=@LeadID", conn);
updateCommand.Parameters.AddWithValue("@LeadID", rmsObj.RecruitID);
updateCommand.Parameters.AddWithValue("@IsPositive", IsPositive);
updateCommand.Parameters.AddWithValue("@OptOutDate", DateTime.Now);
updateCommand.ExecuteNonQuery();
sqlDataReader.Close();
}

if (!hasRows) {
SqlCommand insertCommand = new SqlCommand("INSERT INTO RMSResponse (LeadID, IsPositive, ReceivedDate) " + "VALUES(@LeadID, @IsPositive, @ReceivedDate)", conn);
insertCommand.Parameters.AddWithValue("@LeadID", rmsObj.RecruitID);
insertCommand.Parameters.AddWithValue("@IsPositive", true);
insertCommand.Parameters.AddWithValue("@ReceivedDate", DateTime.Now);
int rows = insertCommand.ExecuteNonQuery();
}
} catch (SqlException ex) {
Console.WriteLine(ex.Message);
}
}

最佳答案

您可以将更新移至 SQL - 您所做的只是将 OptOutDate 设置为今天。您可以将潜在客户 ID 列表传递给批量更新语句。

要插入记录,您可以批量插入暂存表,然后执行 SQL 以插入表中尚不存在的 ID 的数据。

您的 C# 中没有太多逻辑,因此将数据拉出然后将其放回原处会使速度变得不必要地慢。


如果您不想追根究底,那么其他提示包括:

  • 在循环外打开一个连接
  • 在循环外创建一个 SqlCommand 对象并通过重置参数重用它
  • 更改您的选择 SQL 以仅选择您需要的列,而不是 *

关于c# - SQL 代码超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11428199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com