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; } } }