11

みんな私は学生で、.NET、特にMVC3開発は初めてですが、私のプロジェクトの1つでは、それに取り組む必要があるため、学習段階を経て、直面している問題と混乱はDB接続に関するものです。データベースからのレコードの取得に関しては、次のようなものです。

//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 ライブラリをチェックしているときに、SqlDataAdapter が、SelectCommand と接続文字列を直接受け取るコンストラクター SqlDataAdapter(String, String) を提供していることがわかったので、次のように、その間に 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 の実際の違いは何ですか?
  • OneとTwoのどちらの方法が優れていますか?
  • セキュリティやパフォーマンスに影響を与える可能性のある方法 2 でショートカットを使用しているのではないかと心配していますか?

私が非常に初心者またはぼやけているように聞こえる場合は、事前にお詫び申し上げます。私の概念を明確にすることができる助けに感謝します! ありがとうございました!:)

4

2 に答える 2

10

エラースタックはそれを正しく要約しました:

  • SqlAdapter は、データセットを埋めるために使用されます。
  • SqlCommand は、作成/読み取り/更新/削除操作、ストアド プロシージャの実行など、あらゆる目的に使用できます。

加えて:

  • SqlCommand には、セキュリティに関して生の文字列を使用することに対する大きな利点が 1 つあります。それは、Sql インジェクションから保護できることです。string.Format(...) の代わりに、ユーザーが指定した値にパラメーターを使用するだけです。

私の個人的な好みは、悪意のあるユーザーによる SQL インジェクションを回避するために、SqlCommand で任意の SQL 文字列をラップし、それに SqlParameters を追加することです。
2 つのアプローチのパフォーマンスに関しては、違いはないと思います。(誰かが私が間違っていることを証明できるなら、そうしてください!)。
したがって、より長いバリアント 1 に固執し、必要に応じてコマンドとパラメーターを使用することをお勧めします。

ちょっとした補足 - データセットとデータテーブルは、Linq2Sql と Entity Framework のせいで、最近少しゲームから外れています。
しかしもちろん、昔ながらの SqlCommands/Adapters/Readers の知識は大歓迎です :)

于 2011-10-15T20:22:08.087 に答える
-6

急げ!LINQ に注目してください!!!

SQLDataset や TableAdapters のようなおばあちゃんのようなものはもうありません。開いている接続もありません。LINQ を使用すると、すべてがスムーズになります。

LINQ サンプル:

dim result = from emp in myDataContext.Employees where emp.Salary > 10000 Select emp.ID, emp.SurName, ....

myDatagrid.datasource = result.toList

LINQ を使用すると、クエリ内の単一引用符や crlf について心配する必要はありません...

さらに、SQL テーブル、列、およびオブジェクトに対するインテリセンスも利用できます。

于 2011-10-15T21:11:19.767 に答える