C# 如何循环使用不同的ID';用c语言实现sqlserver中的s#

C# 如何循环使用不同的ID';用c语言实现sqlserver中的s#,c#,sql-server,loops,C#,Sql Server,Loops,我尝试在stackoverflow上搜索类似的答案,但我可能不擅长搜索。我对c#比较陌生,我正在尝试循环使用不同的ID,这样我就可以在SQL server中使用准备好的语句来运行一系列查询,循环使用这些不同的ID。我厌倦了使用while循环,但我可能做得不正确,我不确定。我知道如何使用SQL server,这不是问题所在,因为我在那里工作得很好,但我想尝试在C#中使用它,用于不同的测试目的。 这是我的密码: using System; using System.Data.SqlClient; u

我尝试在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循环的更为优化的方法

如果要使用多个Id进行搜索,则应使用sql中的
IN
子句

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

与您想要实现的目标相比,具体出了什么问题?您是否遇到了错误或一些意外行为?目前还不清楚您的问题是什么,因此很难提出解决方案。“如何”不是一个很好的问题,因为可能有几种方法(因为你的问题很笼统)。你试过一种方法…你到底遇到了什么问题?顺便说一句,我不会在while(true)时使用
while,只要在while时使用
(i)此循环将只执行一次。我最初是46556,当它>4700时,您将中断循环。此外,您不应该在循环的每次迭代中创建新连接。和prepared语句。prepared语句的思想是-prepare one,并为每次执行设置参数。为什么不在这里解释一下您想要实现的目标。i我猜会有其他更有效的方法来执行itAh,我道歉。这是yu_sha说的,它只执行一次,我想让代码循环一直执行到47000。我知道发生了什么,我错过了一个0,这很简单。我还将修复循环,添加哦,是的,我正在SQL Manager中的SQL Server查询中这样做我只是在制作c版本的时候忘了更改,谢谢