在SqlCommand和SqlDataAdapter之间混淆

Mav*_*ven 9 .net c# sqlcommand sqldataadapter

每个人我都是学生,不熟悉.NET,特别是MVC3开发,但对于我的一个项目,我要研究它,因此经历学习阶段我面临的问题和混乱是关于数据库连接,我看到了什么.关于从数据库中检索记录是这样的:

//Method One:
var conn = new SqlConnection(conString.ConnectionString);
const string cmdString = "Select * FROM table";
var cmd = new SqlCommand(cmdString, conn); 
var mySqlDataAdapter = new SqlDataAdapter(cmd);
mySqlDataAdapter = new SqlDataAdapter(cmd);
mySqlDataAdapter.Fill(myDataSet, "design");
// making a new SqlCommand object with stringQuery and SqlConnection object THEN a new SqlDataAdapter object with SqlCommand object and THEN filling up the table with the resulting dataset.
Run Code Online (Sandbox Code Playgroud)

但是当我查看MSDN Library时,我发现SqlDataAdapter提供了一个构造函数SqlDataAdapter(String,String),它直接接受一个SelectCommand和一个连接字符串来启动,从而跳过SqlCommand之间的角色,如下所示:

//Method Two:
var conn = new SqlConnection(conString.ConnectionString);
const string cmdString = "Select * FROM table";
var mySqlDataAdapter = new SqlDataAdapter(cmdString, conn);
mySqlDataAdapter.Fill(myDataSet, "design");
Run Code Online (Sandbox Code Playgroud)

对我来说看起来很简短,但我很困惑,如果这样可行,那么为什么大多数书籍/教师都会提前(SqlCommand的方式).

  • SqlCommand和SqlDataAdapter之间究竟有什么区别?
  • 哪种方法更好一两个?
  • 我害怕我在方法二中使用了一个可能影响安全性或性能的快捷方式?

如果我听起来很新手或模糊,请提前道歉!将感谢任何可以清除我的概念的帮助!谢谢!:)

Vik*_*orZ 7

Errorstacks总结正确:

  • SqlAdapter用于填充数据集.
  • SqlCommand可用于与创建/读取/更新/删除操作,存储过程执行等相关的任何目的.

此外:

  • SqlCommand在安全性方面有一个很大的优势,可以防止使用原始字符串 - 它们可以保护您免受Sql注入攻击.只需使用用户提供的值的参数而不是string.Format(...).

我个人的偏好是在SqlCommand中包装任何sql字符串并向其添加SqlParameters以避免恶意用户进行Sql注入.
关于这两种方法的表现 - 我不认为有任何区别.(如果有人可以证明我错了 - 那就去做!).
所以我建议坚持使用更长的变量1并在必要时使用命令加参数.

一点注意事项 - 由于Linq2Sql和Entity Framework,数据集和DataTables最近有点不合时宜.
但当然欢迎普通老SqlCommands/Adapters/Readers的知识:)