2009-04-02 4 views
1

Я видел много ссылок на то, что TableAdapters слабы и глупы, и что любой настоящий dev будет использовать DataAdapters. Я не знаю, правда ли это или нет, но я изучаю этот вопрос и подчеркиваю, как плохо пахнет весь этот «DataAdapter/TableAdapter против типизированных наборов данных».DataAdapters от типизированных DataSets = кошмары схемы SQL

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

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

Из моих исследований, вот как я вижу 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, который соответствует типизированной схеме. Все, что они сделали, это переместить головную боль в новую область.

Пожалуйста, скажите мне, что у меня отсутствует sometehing, который сделает это намного лучше.

+0

Я знаю, что это было много лет назад, но для всех, кто проходит этот путь - с помощью дизайнера вам не нужно будет ничего делать. Вам не нужно будет бороться с файлом xsd, и ваш SQL будет одним или несколькими параметрами запросов в таблице. Типизированные наборы данных и табличные адаптеры не так плохи, как предполагал их представитель на SO - просто никто не знает, как правильно их использовать! – peterG

ответ

0

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

1

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

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

+0

Я думаю, что суета с TableAdapters связана с Joins, может быть? Может ли TA писать только на один стол, но DA может обрабатывать объединенные таблицы? – MattSlay

+0

Вот несколько советов о том, почему вы не можете легко использовать Joins в TableAdapters, если требуется обновление: http://www.asp.net/learn/data-access/tutorial-01-cs.aspx Прочитайте все дерьмо в шаге 5.Плохо пахнет? – MattSlay

+0

Оба DataAdapters и TableAdapters предназначены для работы с одним «DataTable». Можно ли обновлять несколько таблиц СУБД, является функцией настройки адаптера и/или возможностей СУБД. –