Получение записей с разбивкой на страницы с использованием языка базы данных DB2 на C#C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Получение записей с разбивкой на страницы с использованием языка базы данных DB2 на C#

Сообщение Anonymous »

Сегодня я получаю записи с разбивкой на страницы в веб-среде Visual Studio, используя язык базы данных SQL Server. Но из-за миграции я вынужден настроить свое приложение для сбора информации через DB2.
Я объясню ключевые методы, которые позволяют извлекать информацию сегодня под SQL Server, а затем то, что я делал. делаю под язык DB2. И поэтому я могу знать, что мне следует изменить в моей логике в DB2, чтобы получить данные в моем представлении Visual Studio.
Под SQL Server все работает правильно, чтобы предоставить все структурировано и объяснено, я поделиться ключевыми этапами:
В этом контроллере я вызываю метод GetPagedSales, который позволяет мне извлекать записи с разбивкой на страницы в моем приложении. С соответствующими параметрами, такими как строка подключения, фильтр, сортировка, номер страницы, конфигурация записей для каждой страницы, количество записей и количество страниц.

Код: Выделить всё

[HttpPost]
public string GetSales(List fieldFilters, List fieldSortOrders, int pageNumber)
{
List sales;
List saleProcessingSummaries;
int saleCount;
int pageCount;

if (fieldFilters == null)
{
fieldFilters = new List();
}

if (fieldSortOrders == null)
{
fieldSortOrders = new List()
{
new FieldSortOrder()
{
FieldName = Common.GetPropertyName(new FuneralAssistanceSale(), sale => sale.Code),
AscendingOrder = true,
Precedence = 1
}
};
}

sales = FuneralAssistance.GetPagedSales(
GlobalConfiguration.SiebelRepositoryConnection,
fieldFilters,
fieldSortOrders,
pageNumber,
GlobalConfiguration.PageSize,
out saleCount,
out pageCount);
}
В этом методе я могу визуализировать количество полученных записей.

Код: Выделить всё

public static List GetPagedSales(string connectionString, List fieldFilters, List fieldSortOrders, int pageNumber, int pageSize, out int saleCount, out int pageCount)
{
SqlCommand getPagedSalesCommand = Common.GetPagedItemsSqlCommand(FuneralAssistanceScripts.GetSales, fieldFilters, fieldSortOrders, pageNumber, pageSize);
SqlCommand getSaleCountCommand = Common.GetItemCountSqlCommand(FuneralAssistanceScripts.GetSales, fieldFilters);
List sales;
DataTable salesTable;

getPagedSalesCommand.CommandTimeout = 900;
getSaleCountCommand.CommandTimeout = 900;

salesTable = Common.ExecuteSqlQuery(connectionString, getPagedSalesCommand);
sales = salesTable.ToList();

saleCount = Convert.ToInt32(Common.ExecuteSqlScalar(connectionString, getSaleCountCommand));
pageCount = (int)Math.Ceiling((double)saleCount / (double)pageSize);

return sales;
}
Я собираюсь поделиться методами GetPagedItemsSqlCommand и GetItemCountSqlCommand. Поскольку я чувствую, что моя проблема может быть здесь:

Код: Выделить всё

internal static SqlCommand GetPagedItemsSqlCommand(string getItemsCommandText, List fieldsFilters, List fieldSortOrders, int pageNumber, int pageSize)
{
List validFields = typeof(T).GetProperties().Select(property => property.Name).ToList();
SqlCommand getPagedItemsCommand = new SqlCommand();
List getItemsCommandParameters = new List();
string whereClause;
string orderByClause;

whereClause = Common.GetWhereClause(fieldsFilters, validFields, ref getItemsCommandParameters);
orderByClause = Common.GetOrderByClause(fieldSortOrders, validFields);

getItemsCommandText = CommonScripts.BasicShell
.Replace("[GetItemsQuery]", getItemsCommandText)
.Replace("[WhereClause]", whereClause)
.Replace("[OrderByClause]", string.Empty)
.Replace("[OffsetFetchClause]", string.Empty);

getPagedItemsCommand.CommandText = CommonScripts.PaginationShell
.Replace("[OrderByClause]", orderByClause)
.Replace("[GetItemsQuery]", getItemsCommandText);

getPagedItemsCommand.Parameters.AddRange(getItemsCommandParameters.ToArray());
getPagedItemsCommand.Parameters.Add("@PageSize", SqlDbType.Int).Value = pageSize;
getPagedItemsCommand.Parameters.Add("@PageNumber", SqlDbType.Int).Value = pageNumber;

return getPagedItemsCommand;
}

Код: Выделить всё

internal static SqlCommand GetItemCountSqlCommand(string getItemsCommandText, List fieldsFilters)
{
List validFields = typeof(T).GetProperties().Select(property => property.Name).ToList();
SqlCommand getItemCountCommand = new SqlCommand();
List getItemCountCommandParameters = new List();
string whereClause;

whereClause = Common.GetWhereClause(fieldsFilters, validFields, ref getItemCountCommandParameters);

getItemsCommandText = CommonScripts.BasicShell
.Replace("[GetItemsQuery]", getItemsCommandText)
.Replace("[WhereClause]", whereClause)
.Replace("[OrderByClause]", string.Empty)
.Replace("[OffsetFetchClause]", string.Empty);

getItemCountCommand.CommandText = CommonScripts.GetItemCountShell.Replace("[GetItemsQuery]", getItemsCommandText);

getItemCountCommand.Parameters.AddRange(getItemCountCommandParameters.ToArray());

return getItemCountCommand;
}
В моем проекте я применил эти шаги, но для языка DB2.
Прежде всего, в драйвере (первый фрагмент моего кода) , я изменил только строку подключения. Я уже убедился, что информация существует и мой запрос верен. Я исключил такую ​​возможность.
Я создал другой метод, аналогичный GetPagedSales, для получения количества записей, но на языке DB2. Логично, что вместо использования экземпляров SQLCommand я перехожу на OleDbCommand.

Код: Выделить всё

public static List GetPagedSalesFromNewInsuranceAssistant(string connectionString, List fieldFilters, List fieldSortOrders, int pageNumber, int pageSize, out int saleCount, out int pageCount)
{
OleDbCommand getPagedSalesCommand = Common.GetPagedItemsOleDbCommand(FuneralAssistanceScripts.GetSalesNewInsuranceAssistantDevelopment, fieldFilters, fieldSortOrders, pageNumber, pageSize);
OleDbCommand getSaleCountCommand = Common.GetItemCountOleDbCommand(FuneralAssistanceScripts.GetSalesNewInsuranceAssistantDevelopment, fieldFilters, fieldSortOrders);
List sales;
DataTable salesTable;

getPagedSalesCommand.CommandTimeout = 900;
getSaleCountCommand.CommandTimeout = 900;

salesTable = Common.ExecuteDb2Query(connectionString, getPagedSalesCommand);

foreach (DataColumn column in salesTable.Columns)
{
foreach (PropertyInfo property in typeof(FuneralAssistanceSale).GetProperties())
{
if (property.Name.ToUpper() == column.ColumnName)
{
column.ColumnName = property.Name;
break;
}
}
}

sales = salesTable.ToList();

saleCount = Convert.ToInt32(Common.ExecuteOleDbScalar(connectionString, getSaleCountCommand));
pageCount = (int)Math.Ceiling((double)saleCount / (double)pageSize);

return sales;

}
Я хотел бы уточнить, что я добавил foreach в этот метод, поскольку понимаю, что DB2 имеет другой способ извлечения данных. В отдельной консоли того же проекта он извлекает записи (я использую тот же скрипт, что и здесь) и отображает их правильно.
Я настроил методы GetPagedItemsOleDbCommand и GetItemCountOleDbCommand с помощью Формы OleDbCommand. Подозреваю, что проблема с отсутствием извлечения записей с разбивкой на страницы связана с тем, что они ранее ссылались на свойство типа SQL.
То же самое делаем в этих используемых методах, называемыхwhereClause = GetWhereClause2(fieldsFilters, validFields, ссылка getItemsCommandParameters); orderByClause = GetOrderByClauseByDB2(fieldSortOrders, validFields);
Я с нетерпением жду ваших комментариев и надеюсь, что я что-то пропустил.
Заранее спасибо.

Подробнее здесь: https://stackoverflow.com/questions/791 ... in-c-sharp
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»