Адаптер данных против команды Sql - PullRequest
5 голосов
/ 04 июля 2011

Какой из них будет лучше выполнить оператор вставки для базы данных ms-sql:

Sql DataAdapter или объект команды SQL?

Какой из них будет лучше, while inserting only one row и while inserting multiple rows?

Простой пример использования кода:

Команда SQL

string query = "insert into Table1(col1,col2,col3) values (@value1,@value2,@value3)";
int i;

SqlCommand cmd = new SqlCommand(query, connection);
// add parameters...
cmd.Parameters.Add("@value1",SqlDbType.VarChar).Value=txtBox1.Text;
cmd.Parameters.Add("@value2",SqlDbType.VarChar).Value=txtBox2.Text;
cmd.Parameters.Add("@value3",SqlDbType.VarChar).Value=txtBox3.Text;
cmd.con.open();
i = cmd.ExecuteNonQuery();
cmd.con.close();

Адаптер данных SQL

DataRow dr = dsTab.Tables["Table1"].NewRow();
DataSet dsTab = new DataSet("Table1");
SqlDataAdapter adp = new SqlDataAdapter("Select * from Table1", connection);
adp.Fill(dsTab, "Table1");
dr["col1"] = txtBox1.Text;
dr["col2"] = txtBox5.Text;    
dr["col3"] = "text";

dsTab.Tables["Table1"].Rows.Add(dr);

SqlCommandBuilder projectBuilder = new SqlCommandBuilder(adp);
DataSet newSet = dsTab.GetChanges(DataRowState.Added);
adp.Update(newSet, "Table1");

Ответы [ 3 ]

3 голосов
/ 04 июля 2011

Обновление источника данных намного проще с помощью DataAdapters.Вносить изменения легче, поскольку вам просто нужно изменить DataSet и вызвать Update.

Вероятно, нет (или очень мало) различий в производительности между использованием DataAdapters против команд.DataAdapter внутренне использует объекты Connection и Command и выполняет Commands для выполнения действий (таких как Fill и Update), которые вы им говорите, так что это почти то же самое, что и использование только объектов Command.

2 голосов
/ 04 июля 2011

Я бы использовал LinqToSql с DataSet для одиночной вставки и большинства запросов Database CRUD. Это безопасный тип, относительно быстрый для некомпилированных запросов, таких как приведенный выше.

Если у вас есть много строк для вставки (1000+) и вы используете SQL Server 2008, я бы использовал SqlBulkCopy. Вы можете использовать свой DataSet и ввести в хранимую процедуру и слить в пункт назначения

Для сложных запросов я рекомендую использовать dapper в сочетании с хранимыми процедурами.

1 голос
/ 04 июля 2011

Я полагаю, у вас будет какой-то контроль над вашей связью с базой данных. Это означает абстрагирование некоторого кода, и для этого CommandBuilder автоматически генерирует для вас операторы CUD.

Что было бы еще лучше, если бы вы использовали эту технику вместе с набранным набором данных. тогда у вас есть intellisense и проверка времени компиляции во всех ваших столбцах

...