Как перебрать различные идентификаторы в SQL Server с помощью C # - PullRequest
0 голосов
/ 26 сентября 2018

Я попытался найти подобный ответ здесь на 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.

1 Ответ

0 голосов
/ 26 сентября 2018

Если вы хотите выполнять поиск с использованием нескольких идентификаторов, вам следует использовать предложение IN в sql.

SELECT TOP 100 GlobalCustomerVehicleID, GlobalCustomerID, Status, VIN, LastEditByUserID, CreatedByUserID, Year, Make, Model FROM Drop_GlobalCustomerVehicle WHERE GlobalCustomerID IN (ID1,ID2,ID3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...