Я бы всегда пошел на вариант 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
и все такое)