如何使用C#在SQL Server中循环遍历不同的ID

时间:2018-09-26 15:40:19

标签: c# sql-server loops

我尝试在stackoverflow上搜索类似的答案,但是我可能搜索不好。我是C#的新手,我想做的是遍历不同的ID,以便可以在SQL Server中使用准备好的语句来运行一系列查询,遍历那些不同的ID。我使用了while循环很累,但是我可能做错了,我不确定。我知道如何使用SQL Server,这不是问题,因为我在那里工作得很好,但是我想尝试在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();
    }

}

我知道其中一些并不十分安全,例如直接在代码内部的连接字符串,但这仅用于测试目的,不会在内部测试之外使用。 有人可以告诉我我要去哪里错了,甚至可以建议解决办法?谢谢您的宝贵时间。

编辑:这是一个简单的修复,我很抱歉我的问题过于笼统!问题是我希望它实际上循环几次,而不是一次。它的工作方式是执行单个查询,但没有经历我期望的其他ID。但是,我错过了一个0,即使在搜索代码后,我也完全错过了这个非常简单的错误。 感谢您指出这一点,并建议一种更优化的方式来编写while循环。

1 个答案:

答案 0 :(得分:1)

如果要使用多个ID进行搜索,则应在sql中使用IN子句。

SELECT TOP 100 GlobalCustomerVehicleID, GlobalCustomerID, Status, VIN, LastEditByUserID, CreatedByUserID, Year, Make, Model FROM Drop_GlobalCustomerVehicle WHERE GlobalCustomerID IN (ID1,ID2,ID3)