почему мы идем на sqlcommandbuilder? - PullRequest
0 голосов
/ 19 октября 2011

Вариант 1: вставить данные в БД

SqlCommand cmd = new SqlCommand("INSERT INTO table_name(eid,eName,Dept) values('"+ textBox1.Text +"','"+ textBox2.Text +"','"+ Textbox3.Text +"'", con);

cmd.ExecuteNonQuery();

Вариант 2:

SqlDataAdapter sqlda = new SqlDataAdapter("SELECT * FROM table_name",con);

SqlCommandBuilder sqlcomb = new SqlCommandBuilder(sqlda);

DataSet dset = new DataSet("table1");

sqlda.Fill(dset,"table1");

DataRow drow = dset.Tables["table1"].NewRow();
drow["eid"] = textBox1.Text.ToString();
drow["eName"] = textBox2.Text.ToString();
drow["Dept"] = textBox3.Text.ToString();

dset.Tables["table1"].Rows.Add(drow);

sqlda.Update(dset, "table1");

У меня такой вопрос, я чувствую, что option1 - лучший метод для вставки. Почему мы используем SqlCommandBuilder для вставки данных? Какая польза от SqlCommandBuilder? Какие-либо преимущества при вставке данных с использованием SqlCommandBuilder? ваше предложение плз

1 Ответ

1 голос
/ 19 октября 2011

Я бы всегда пошел на вариант 3: параметризованные запросы !!

НЕ СОГЛАСОВАТЬ ВМЕСТЕ С ВАМИ SQL-заявления - НИКОГДА

Если вы это сделаете - посмотрите , что произойдет в конечном итоге .....

Они оба безопасны от атак SQL-инъекцийи более эффективный (поскольку один план запроса можно использовать повторно, если вызвать его с несколькими значениями параметров):

string insertStmt = "INSERT INTO dbo.table_name(eid, eName, Dept) " + 
                    "VALUES(@eid, @eName, @dept)";

SqlCommand cmd = new SqlCommand(insertStmt, con);

cmd.Parameters.Add("@eid", SqlDbType.Int).Value = .......;
cmd.Parameters.Add("@ename", SqlDbType.VarChar, 50).Value = .......;
cmd.Parameters.Add("@dept", SqlDbType.VarChar, 100).Value = .......;

cmd.ExecuteNonQuery();

или затем вариант 4: использовать ORM (объектно-реляционныйкак Dapper-Dot-Net или Entity Framework , чтобы превратить ваши реляционные данные в красивые объекты для использования в .NET (и, наконец, забыть о возни с DataRow и DataColumn и все такое)

...