Я хочу запустить цикл foreach, как только i > x Я пробовал цикл while перед foreach Сделать цикл Но foreach все равно работает, даже если я был равен Я не могу понять, как мне это запустить
Мне нужно, чтобы он запустился 9999 раз, затем сделал что-то, а затем начал все сначала со следующего 9999 и так далее.
Я обновил весь код Мне нужно проверить все строки в таблице данных с размером пакета 9999 на данный момент, а затем запустить restsharp и затем перейти к следующему 9999.
Когда все строки в таблице данных будут готовы, мне нужно перейти к запросу sql и запустить следующий запрос, а затем новую таблицу данных и тот же размер пакета 9999.
Пожалуйста помоги
Это мой код
protected void run_Click1(object sender, ImageClickEventArgs e)
{
var body = "";
string[] evenNums = new string[3];
evenNums[0] = "2";
evenNums[1] = "3";
evenNums[2] = "4";
var daytime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss", CultureInfo.GetCultureInfo("sv-SE"));
var day = DateTime.Now.ToString("yyyyMMdd", CultureInfo.GetCultureInfo("sv-SE"));
foreach (string Site in evenNums)
{
body = "{\"requestId\": \"144x25\",\"items\": [";
using (SqlConnection con = new SqlConnection())
{
string conn_str = ConfigurationManager.ConnectionStrings["SqlConnection1"].ConnectionString;
SqlConnection conn = new SqlConnection(conn_str);
string query = "SELECT [number],[surname],[forename],[emailAddress],[taxIdentifier] FROM[Customer] WITH(NOLOCK) WHERE[CustomerID] IN(SELECT[CustomerID] FROM[Visit] WITH(NOLOCK) WHERE[GamingDate] Between convert(Date, DATEADD(DAY, -365, GETDATE())) AND convert(Date, getdate())) AND(EmailAddress IS NOT NULL) AND(ContactTypes & 1 = 1) AND(HomePropertyID = " + Site + ") /* 2= Malmö 3=Göteborg 4=Stockholm */ AND(LEN(TaxIdentifier) = '12')";
SqlCommand comm = new SqlCommand(query, conn);
conn.Open();
comm.ExecuteNonQuery();
DataTable dt1 = new DataTable();
using (SqlDataAdapter adapter = new SqlDataAdapter(comm))
{
adapter.Fill(dt1);
}
string newFileName = "C:\\temp\\" + ort + "" + day + "FromNeon_Cleaned.csv";
string clientHeader = "number" + "," + "\"surname\"" + "," + "\"forename\"" + "," + "\"repsonseId\"" + "," + "\"responseTime\"" + Environment.NewLine;
File.WriteAllText(newFileName, clientHeader);
int batchSize = 2;
bool willBreak = false;
for (int i = 0; i < batchSize; i++)
{
for (int j = 0; j < dt1.Rows.Count; j++)
{
DataRow dtRow = dt1.Rows[j];
if (i == j)
{
break; // in there what you want as I understand
willBreak = true;
}
var number = dtRow.ItemArray[0];
var surname = dtRow.ItemArray[1];
var forename = dtRow.ItemArray[2];
var emailAddress = dtRow.ItemArray[3];
string taxidentifier = (string)dtRow.ItemArray[4];
//string taxidentifier = "2211221143";
if (Personnummer.Valid(taxidentifier))
{
body += "{\"itemId\": \"" + number + "\",\"subjectId\": \"" + taxidentifier + "\"},";
}
body = body.Remove(body.Length - 1);
body += "]}";
}
if (willBreak) break;
}
var url = "https://marketing.spelpaus.se/api/marketing-subjectid/mw41yZpBFC";
var client = new RestClient(url);
var request = new RestRequest(url, Method.Post);
request.AddHeader("authorization", "vGrpkoNEWHpMuQVrIKVGfsfx2l7SLbsSfQ7PbISjMyiK545ezHW5BzsfPgJq0HA6");
request.AddHeader("Content-Type", "application/json");
//var bodyy = JsonConvert.SerializeObject(body);
request.AddBody(body, "application/json");
RestResponse response = client.Execute(request);
if (response.StatusCode == HttpStatusCode.OK)
{
var obj = JsonConvert.DeserializeObject<dynamic>(response.Content);
var alloweditemsdata = (obj.allowedItemIds);
var responseId = (obj.responseId);
//var responseId1= Convert.ToInt32(responseId.value);
dt1.PrimaryKey = new DataColumn[] { dt1.Columns["number"] };
foreach (int alloweditem in alloweditemsdata)
{
DataRow Drw = dt1.Rows.Find(alloweditem);
var numberresult = Drw.ItemArray[0];
var surnameresult = Drw.ItemArray[1];
var forenameresult = Drw.ItemArray[2];
var emailAddressresult = Drw.ItemArray[3];
string taxidentifierresult = (string)Drw.ItemArray[4];
string clientDetails = " " + numberresult + ",\"" + surnameresult + "\",\"" + forenameresult + "\",\"" + emailAddressresult + "\",\"" + responseId + "\",\"" + daytime + "\"" + Environment.NewLine;
File.AppendAllText(newFileName, clientDetails, Encoding.Unicode);
}
}
}
}
}
Если вы не хотите запускать код, когда i==j, используйте if (i != j) { code goes here } вместо прерывания, когда i==j. (Кроме того, var evenNums = new string[3] { "2", "4", "6" }; сэкономит несколько строк.)
HomePropertyID в базе данных — это строка или число?





Если мы предпочитаем циклы for вместо циклов while, мы сможем лучше понять, в скольких циклах мы находимся, поэтому я переписал ваш код с помощью цикла for, и если i == x истинно, я завершил весь цикл прерыванием.
int batchSize = 2;
bool willBreak = false;
for (int i = 0; i < batchSize; i++)
{
for (int j = 0; j < dt1.Rows.Count; j++)
{
DataRow dtRow = dt1.Rows[j];
if (i == j) {
break; // in there what you want as I understand
willBreak=true;
}
var number = dtRow.ItemArray[0];
var surname = dtRow.ItemArray[1];
var forename = dtRow.ItemArray[2];
var emailAddress = dtRow.ItemArray[3];
string taxidentifier = (string)dtRow.ItemArray[4];
//string taxidentifier = "2211221143";
if (Personnummer.Valid(taxidentifier))
{
body += "{\"itemId\": \"" + number + "\",\"subjectId\": \"" + taxidentifier + "\"},";
}
body = body.Remove(body.Length - 1);
body += "]}";
}
if (willBreak) break;
}
Хотя этот код может решить вопрос, включая объяснение того, как и почему это решает проблему, действительно поможет улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, а не только того, кто задает вопрос сейчас. Пожалуйста, отредактируйте свой ответ, добавив пояснения и указав, какие ограничения и предположения применяются.
Если я сломаюсь, как код, которым вы поделились, вернусь ли я, чтобы получить следующие 2? Получение ошибки willBreak = True; Обнаружен недостижимый код
У вас есть 2 вложенных цикла for: внешний с переменной цикла i и внутренний с переменной цикла j. Но на самом деле вы нигде не используете i, кроме как для break.
Результат следующий:
j-цикл сначала сразу же прерывается, когда j==0, поскольку значение i равно 0.j-цикл перезапускается из-за внешнего i-цикла, теперь он прерывается, когда j==1, потому что теперь значение i равно 1.i не завершится, потому что он достиг значения batchsize.Это действительно странно и похоже на ошибку. Я подозреваю, что цикл i вам вообще не нужен, поэтому предлагаю вам удалить его и вместо этого сделать что-то вроде if (j == batchsize) { break; } внутри цикла j.
Питер Б. Это было мое предложение с этого форума. Я попробовал и забыл, что изменил код, прежде чем редактировать свое сообщение.
Петр Б, как бы ты порекомендовал петли, чтобы подошло как нужно, спасибо
Теперь у меня есть этот шаг. но после того, как я запустил пакетный размер, он ломается и выполняет шаги, описанные ниже, но после этого я перехожу к началу, вопрос sql, но мне нужно, чтобы он запускал следующий пакетный размер, пока он не выполнит все строки в таблице данных, есть идеи о том, как мне могу это сделать
Лучше всего создать новый вопрос, если после внесения изменений возникнет другая/новая проблема.
Прочтите документ: Learn.microsoft.com/en-us/dotnet/csharp/language-reference/…