每个人我都是学生,不熟悉.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.
但是当我查看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的方式)。
如果我听起来很新手或模糊,请提前道歉!将感谢任何可以清除我的概念的帮助!谢谢! :)
答案 0 :(得分:7)
Errorstacks总结正确:
另外:
我个人的偏好是在SqlCommand中包装任何sql字符串并向其添加SqlParameters以避免恶意用户进行Sql Injection。
关于这两种方法的表现 - 我不认为有任何区别。 (如果有人能证明我错了 - 那就去做吧!)
所以我建议坚持使用更长的变量1并在必要时使用命令加参数。
一点注意事项 - 由于Linq2Sql和Entity Framework,数据集和DataTables最近有点不在游戏中。
但当然欢迎普通老SqlCommands / Adapters / Readers的知识:)
答案 1 :(得分:-6)
快点行动!请注意LINQ !!!
没有像SQLDataset或TableAdapters这样的gran'ma东西,没有开放连接。 LINQ,一切都变得顺畅。
LINQ示例:
dim result =来自myDataContext.Employees中的emp 其中emp.Salary> 10000 选择emp.ID,emp.SurName,....
myDatagrid.datasource = result.toList
使用LINQ,您不必担心查询中的单引号或crlf ......
你甚至可以对SQL表,列和对象进行智能感知!