gpt4 book ai didi

c# - 混淆 SqlCommand 和 SqlDataAdapter

转载 作者:太空狗 更新时间:2023-10-29 17:59:40 28 4
gpt4 key购买 nike

大家 我是一名学生,刚开始接触 .NET,特别是 MVC3 开发,但是对于我的一个项目,我必须完成它,所以要经历学习阶段我面临的问题和困惑是关于 DB-Connectivity,我学习的关于从数据库中检索记录的内容是这样的:

//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.

但是当我结帐时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");

对我来说看起来简短而漂亮,但我在这里感到困惑,如果这可以通过这种方式实现,那么为什么大多数书籍/教师都更早(SqlCommand 的方式)。

  • SqlCommand 和 SqlDataAdapter 之间究竟有什么区别?
  • 哪种方法更好,一种还是两种?
  • 是否担心我在方法二中使用的快捷方式可能会影响安全或性能?

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

最佳答案

Errorstacks 的总结是正确的:

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

另外:

  • SqlCommand 在安全性方面相对于使用原始字符串具有一大优势 - 它们可以保护您免受 Sql 注入(inject)。只需对用户提供的值使用参数而不是 string.Format(...)。

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

一点旁注 - 由于 Linq2Sql 和 Entity Framework,Datasets 和 DataTables 最近有点过时了。
但是当然欢迎了解普通的旧 SqlCommands/Adapters/Readers 的知识 :)

关于c# - 混淆 SqlCommand 和 SqlDataAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7777866/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com