Как запросить список C # по таблице базы данных - PullRequest
0 голосов
/ 09 апреля 2019

Мой код не возвращает никаких строк из тестовой таблицы базы данных, когда я передаю строковую версию списка, но он возвращает строки, если я передаю элементы списка напрямую.

Когда я использую окно сообщения для отображения строки joinSerialsList, оно, похоже, правильно отформатировано.

// Create comma delimited list of serials:
int currentSerial = beginning;
List<string> serialsList = new List<string>();

for (int i = 0; i < count; i++)
{
     serialsList.Add(currentSerial.ToString());
     currentSerial++;
}

string joinedSerialsList = string.Format("({0})", string.Join(", ", serialsList));

OleDbConnection connection = BadgeDatabaseDB.GetConnection();
string checkStatement
     = "SELECT SerialNumber, OrderNumber "
     + "FROM SerialNumbersMFG "
     + "WHERE SerialNumber IN (@List)";

OleDbCommand command = new OleDbCommand(checkStatement, connection);
command.Parameters.AddWithValue("@List", joinedSerialsList);

string duplicateSerials = "";

try
{
    connection.Open();
    OleDbDataReader dataReader = command.ExecuteReader();

    if (dataReader.Read())
    {
        duplicateSerials += dataReader["OrderNumber"].ToString() + "\n";
    }
}
catch (OleDbException ex)
    {
        throw ex;
    }
finally
    {
        connection.Close();
    }

return duplicateSerials;

1 Ответ

0 голосов
/ 09 апреля 2019

Я переписал ваш образец, эта работа:

    private IEnumerable<string> getData()
    {
        // Create comma delimited list of serials:
        int currentSerial = 4452; // your constant
        var serialsList = new List<int>();
        var count = 100;

        for (int i = 0; i < count; i++)
            serialsList.Add(currentSerial++);

        var connString = getConnectionString();

        var results = new List<string>();
        string sqlSelect = $"SELECT SerialNumber, OrderNumber FROM SerialNumbersMFG WHERE SerialNumber IN ({string.Join(",", serialsList)})";

        using (var connection = new SqlConnection(connString)) // BadgeDatabaseDB.GetConnection();
        {
            using (var command = new SqlCommand(sqlSelect, connection))
            {
                connection.Open();
                var dataReader = command.ExecuteReader();

                while (dataReader.Read())
                    results.Add(dataReader["OrderNumber"].ToString());
            }
        }

        return results;
    }
...