Как мы можем перенести код, связанный с DBF, на C#.NET?

У меня есть код, связанный с операцией dbf в Visual foxpro, как показано ниже.

SELECT 3
USE student shared

SET FILTER TO

LOCATE FOR id=thisform.txtStudentID.Value 

Может ли кто-нибудь помочь мне понять каждую строку кода и преобразовать ее в C#.net. Какие шаги необходимо предпринять для преобразования кода foxpro в C#? Здесь я использую SQL Server в качестве бэкэнда в C # Project. Иногда я также сталкивался с кодом ниже

Use Student Shared 

// Здесь прямой доступ к полям базы данных. Здесь они нацелены на получение всех записей, таких как «выбрать * от студента», или только последнюю запись. По умолчанию эта таблица студентов имеет 6 столбцов, но в файле dbf у нас есть 12 столбцов. Как это сделать в С#.NET?


person Hemant Kumar    schedule 22.04.2013    source источник
comment
В своем вопросе выше вы не сообщаете нам, какую базу данных вы хотите настроить. Вы стремитесь общаться с БД FoxPro из C# или уже экспортировали свою БД в какую-либо форму БД на основе SQL?   -  person Rich Turner    schedule 22.04.2013
comment
lang ref: msdn.microsoft.com/en -us/library/dd5f4hyy%28v=vs.80%29.aspx   -  person Ray Cheng    schedule 22.04.2013
comment
Я полагаю, что существует драйвер данных FoxPro для ADO. NET, чтобы вы могли просто передавать команды непосредственно в базу данных через C# с помощью ADO.NET. Преобразование не требуется.   -  person Icemanind    schedule 23.04.2013


Ответы (3)


Чтобы ответить на часть вашего вопроса - что делает этот код...

Следующее устанавливает рабочую область (я не работал с foxpro уже несколько лет, но думаю, что это избыточно в более поздних версиях VFP). Рабочая область — это просто пространство в памяти, которое хранится отдельно от других рабочих пространств.

Select 3

Следующее открывает таблицу под названием «Студент» для доступа не только для чтения в ранее открытое рабочее пространство.

USE student shared

Следующее очищает все фильтры в таблице (поэтому, если вы «ПРОСМОТРИТЕ», вы получите все записи)

SET FILTER TO

Следующее установит указатель записи на конкретную запись, где запись с идентификатором равна значению текстового поля txtStudentID в текущей форме (foxpro не является строго типизированным языком).

LOCATE FOR id=thisform.txtStudentID.Value 

Что касается второй части вашего вопроса, нет прямого способа конвертировать между foxpro и приложением С#. Основные моменты заключаются в том, что Foxpro построен вокруг базы данных и не является строго типизированным, в то время как c# строго типизирован и может обращаться к базе данных. Если вы выполните быстрый поиск в Google, вы, вероятно, найдете инструменты, написанные такими людьми, как Маркус Эггер, для преобразования foxpro в c#.

ИМХО и из опыта переноса системы масштаба предприятия с VFP на сервер С#/SQL - если вы хотите сделать это с системой - остановитесь, убедите себя, что это плохая идея, и просто перепишите это на С# - выбор базы данных который лучше всего соответствует вашим потребностям.

Трудно комментировать дальше - вы не указали, какую версию foxpro вы используете - вы используете foxpro или visual foxpro? Какого размера ваше приложение, какой фон?

ХТХ Джей

person Jay    schedule 22.04.2013
comment
Джей - преобразования между строкой и целым числом НЕ происходят за кулисами. Да, переписать его в другой технологии — это абсолютно правильный путь, но иногда должен быть переходный этап, когда этой технологии может потребоваться доступ к данным DBF. - person Alan B; 23.04.2013
comment
Несколько раз я сталкивался с приведенным ниже типом кода. Используйте общий доступ к учащимся // Здесь прямой доступ к полям базы данных. Здесь они нацелены на получение всех записей, таких как select * от учащегося или только последней записи. По умолчанию эта студенческая таблица имеет 6 столбцов, но в файле dbf у нас есть 12 столбцов. Как это сделать в С#.NET? - person Hemant Kumar; 23.04.2013
comment
@AlanB Да, вы правы - думал о чем-то совершенно другом и обновил свой ответ. - person Jay; 23.04.2013

Невозможно напрямую преобразовать это в С#.

SELECT 3

FoxPro имеет концепцию «рабочих областей» — как слоты, в каждом из которых может быть открытый файл DBF. Эта команда говорит: «ОК — мы смотрим на рабочую область 3».

Это не имеет эквивалента в .NET

USE student SHARED

Это откроет student.dbf в текущем каталоге для общего доступа в рабочей области 3.

SET FILTER TO

Если у нас есть набор фильтров, который будет ограничивать количество доступных записей, очистите этот фильтр сейчас. Бессмысленно, так как мы только что открыли таблицу и не установили фильтр.

LOCATE FOR id=thisform.txtStudentID.Value 

Найдите первую запись, где id = thisform.txtStudentID.Value. Последняя часть является настраиваемым свойством формы, в которой выполняется этот код.

Таким образом, все, что делает этот код, — это поиск записи в student.dbf на основе значения. Если вы хотите вернуть эту запись в C# с помощью поставщика OLE DB, вы можете проверить Как загрузить данные DBF в DataTable.

person Alan B    schedule 22.04.2013
comment
Просто хочу отметить, что LOCATE находит первую запись, которая соответствует критериям. Могут быть и другие. - person Tamar E. Granor; 23.04.2013

SET FILTER TO не нужен, так как таблица используется (открыта), поэтому нет фильтра для очистки. Чтобы преобразовать этот фрагмент FoxPro в C#:

SELECT * FROM student WHERE id=thisform.txtStudentID.Value

Затем вам нужно будет зациклить результаты (если они есть). Лучшей практикой будет использование параметра для значения предложения WHERE, чтобы предотвратить внедрение SQL.

person DaveB    schedule 23.04.2013