我尝试在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循环。
答案 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)