using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using Dapper;
using DataModel.Models;
namespace DataModel.Process
{
///
/// Item tracking functions for LotFinderDB interface
///
public partial class LotFinderDB
{
///
/// Query to find items with matching item number or description
///
private const string SQL_SEARCH_ITEMS = @"
SELECT TOP 25
i.ShortItemNumber,
i.ItemNumber,
i.Description,
i.LastUpdateDT
FROM dbo.Item AS i
WHERE i.ItemNumber LIKE '%' + @filter + '%' OR
i.Description LIKE '%' + @filter + '%'
ORDER BY i.ItemNumber";
///
/// Finds items with matching item number or description
///
/// Search filter
/// Items with matching item number or description
public static List- SearchItems(string filter)
{
List
- results = new List
- ();
try
{
using (SqlConnection connection = GetConnection())
{
results.AddRange(connection.Query
- (SQL_SEARCH_ITEMS, new {filter}));
}
}
catch (Exception error)
{
//Log and forward exception
logger.Error("SearchItems: failed to search for item '{0}': {1}.", filter, error.Message);
throw new Exception($"Failed to get serach for item '{filter}' from LotFinderDB.", error);
}
return results;
}
///
/// Query to find items with matching item numbers
///
private const string SQL_LOOKUP_ITEMS = @"
SELECT i.ShortItemNumber,
i.ItemNumber,
i.Description,
i.LastUpdateDT
FROM dbo.Item AS i INNER JOIN
@itemNumbers AS i2 ON (i.ItemNumber = i2.ItemNumber)
ORDER BY i.ItemNumber";
///
/// Finds items with matching item numbers
///
/// Item numbers to match
///
public static List
- LookupItems(List itemNumbers)
{
List
- results = new List
- ();
try
{
//Create search filter parameter
DataTable dataTable = new DataTable();
dataTable.Columns.Add("ItemNumber", typeof(string));
foreach (string itemNumber in itemNumbers)
{
dataTable.Rows.Add(itemNumber);
}
using (SqlConnection connection = GetConnection())
{
results = connection.Query
- (SQL_LOOKUP_ITEMS, new { itemNumbers = dataTable.AsTableValuedParameter("ItemNumberFilterParameter") }).ToList();
}
}
catch (Exception error)
{
//Log and forward exception
logger.Error("LookupItems: failed to find matching items: {0}.", error.Message);
throw new Exception("LookupItems: failed to find matching items in LotFinderDB.", error);
}
return results;
}
}
}