Я попытался найти подобный ответ здесь на stackoverflow, но я мог бы просто плохо искать.Я относительно новичок в c #, и я пытаюсь выполнить цикл по различным идентификаторам, чтобы я мог использовать подготовленный оператор на SQL-сервере для выполнения серии запросов, циклически проходя по этим различным идентификаторам.Я устал использовать цикл while, но, возможно, я сделал это неправильно, и я не уверен.Я знаю, как использовать SQL-сервер, это не проблема, так как у меня там просто отлично работает, но я хочу попробовать использовать его в C # для различных целей тестирования.Вот мой код:
using System;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Threading;
class Program
{
static void Main()
{
Console.WriteLine("Executing query...");
int i = 46556;
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
while (true)
{
using (SqlConnection connection = new SqlConnection("CONNECTION_STRING"))
{
connection.Open();
using (SqlCommand command = new SqlCommand(
"SELECT TOP 100 GlobalCustomerVehicleID, GlobalCustomerID, Status, VIN, LastEditByUserID, CreatedByUserID, Year, Make, Model FROM Drop_GlobalCustomerVehicle WHERE GlobalCustomerID = @ID", connection))
{
command.Parameters.Add(new SqlParameter("ID", i));
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
int GlobalCustomerVehicleID = reader.GetInt32(0);
int GlobalCustomerID = reader.GetInt32(1);
string Status = reader.GetString(2);
string VIN = reader.GetString(3);
int LastEditByUserID = reader.GetInt32(4);
int CreatedByUserID = reader.GetInt32(5);
short Year = reader.GetInt16(6);
string Make = reader.GetString(7);
string Model = reader.GetString(8);
Console.WriteLine("GlobalCustomerVehicleID = {0}, GlobalCustomerID = {1}, Status = {2}, VIN = {3}, LastEditByUserID = {4}, CreatedByUserID = {5}, Year = {6}, Make = {7}, Model = {8}",
GlobalCustomerVehicleID,
GlobalCustomerID,
Status,
VIN,
LastEditByUserID,
CreatedByUserID,
Year,
Make,
Model
);
}
}
}
i = i + 10;
if (i > 47000)
break;
}
stopwatch.Stop();
Console.WriteLine("Time elapsed: {0}", stopwatch.Elapsed);
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
Я знаю, что кое-что из этого не совсем суперобезопасно, например строка подключения непосредственно внутри кода, но это только для целей тестирования и не будет использоваться снаруживнутреннего тестирования.Может кто-нибудь сказать мне, где я иду не так, или даже предложить исправить?Спасибо за ваше время.
Редактировать: это было простое исправление, и я прошу прощения, что мой вопрос был слишком обобщенным!Вопрос заключался в том, что я хотел, чтобы он действительно повторялся несколько раз, а не один раз.Он работал так, что выполнял один запрос, но не проходил через другие идентификаторы, которые я ожидал.Тем не менее, я пропустил один 0, и даже после поиска в моем коде я просто полностью пропустил эту очень простую ошибку.Спасибо, что указали на это и предложили более оптимальный способ написания цикла while.