DataAdapters против Typed DataSets = Кошмарная схема SQL - PullRequest
1 голос
/ 02 апреля 2009

Я видел много ссылок, утверждающих, что Адаптеры таблиц слабы и глупы, и что любой настоящий разработчик будет использовать Адаптеры данных. Я не знаю, правда это или нет, но я исследую этот вопрос и подчеркиваю, насколько плохо пахнет весь этот «DataAdapter / TableAdapter против Typed DataSets».

Позвольте мне попытаться объяснить ...

Предположим, у меня есть определение Typed DataSet в файле xsd, и теперь я готов создать DataAdapter в коде для этой схемы ... (Кстати, я использую OleDb для доступа к автономному .dbf). файлы в папке ... Нет хранимых процедур SQL-сервера, которые можно вызвать здесь, просто старые таблицы, готовые к действию.)

Из моих исследований я вижу, как DataAdapter используется в сочетании с Typed DataSet. Скажи мне, если я ошибаюсь. (Тогда у меня есть большая жалоба / вопрос в конце.)

public DataTable GetJobsByCustomer(string CustNo)
{
    OleDbConnection conn1 = new OleDbConnection(dbConnectionString);
    conn1.Open();

    LMVFP ds1 = new LMVFP(); //My Typed DataSet

    string sqlstring = @"SELECT act_compda, contact, cust_num, est_cost, invoiced, job_hours,
                        job_invnum, job_num, job_remark, job_start, mach_cost, mat_cost, mat_mkup,
                        p_o_num, priority, quote_no, quoted_by, ship_date, ship_info, shop_notes, status, total_cost
                        FROM job_info
                        WHERE (cust_num = ?) AND (status = 'A')
                        ORDER BY priority";

    OleDbDataAdapter JobsAdapter = new OleDbDataAdapter(sqlstring,conn1);
    JobsAdapter.SelectCommand.Parameters.Add("?", OleDbType.VarChar,6).Value=CustNo;

    JobsAdapter.Fill(ds1, "Jobs"); // A table schema in the Typed DataSet

    return ds1.Jobs;

}

Это так? Это работает, так что это хорошо. И действительно, строго типизированное поведение великолепно.

Теперь, моя хватка .... Вы хотите сказать, что я должен поддерживать тот же синтаксис exaxt SQL в моем методе DAL (GetJobsByCustomer), чтобы он соответствовал схеме таблицы в xsd? Это безумие, когда приходится так много поддерживать и разъединять мой код SQL и схему xsd, написанную вручную. Там нет ошибки катинга на всех, так как вы пишете текстовую строку! Вы узнаете во время выполнения, сработает ли это.

Когда вы набираете весь SQL-код в коде, ужасно смотреть назад и вперед, чтобы синхронизировать ваш кодированный SQL-код со схемой таблицы xsd.

Конечно, я что-то упускаю.

Что за фарс. Типизированный набор данных работает с красивым intellisense и всем, потому что он сгенерирован из схемы, но когда дело доходит до него, просто можно написать SQL, который соответствует типизированной схеме. Все, что они сделали, это перенесли головную боль в новую область.

Пожалуйста, скажите мне, что я пропускаю кое-что здесь, что сделает это намного лучше.

Ответы [ 2 ]

1 голос
/ 02 апреля 2009

Я вторую благодарность Адама за LINQ to SQL и EF, но я думаю, что это не вариант для вас (пока) из-за отсутствия поддержки сторонних СУБД. С другой стороны, сторонний ORM (например, NHibernate) может быть вариантом.

Возможно, я не уделяю достаточного внимания, но я не знаю ни одной веской причины избегать использования TableAdapters против DataAdapters. У вас есть ссылка или две?

0 голосов
/ 02 апреля 2009

Я не верю, что вы ничего не упустили; поддерживать этот тип кода никогда не бывает весело. К счастью, теперь у нас есть LINQ to SQL и Entity Framework, которые могут уменьшить объем ручного обслуживания кода, необходимого для синхронизации ваших объектов модели с вашей базой данных.

...