0

そのため、コード ビハインドの asp.net Web フォーム プロジェクトから 100 万件を超えるレコードを、TextBox. 私はLINQでそれをやろうとしましたが、それには時間がかかります...

第 1 の質問: 最適なソリューションは何ですか?

SQL (MSSQL) で更新を実行すると、20 ~ 30 秒しかかからず、許容できる時間であることに気付きました。

2 番目の質問: SQL でプロシージャを作成し、プロジェクトにインポートしてプロシージャを呼び出す必要がありますか? それは私にもっと良い時間を与えるでしょうか?基本的に、インポートされたプロシージャを使用すると、そのクエリを SQL で実行するのに必要な時間の近くまで時間が短縮されますか?

4

3 に答える 3

0

通常のクエリで実行した方が速い場合は、パラメーターを受け入れるストアド プロシージャを作成します。

using (SqlConnection con = new SqlConnection("connection string here")) {
    using (SqlCommand cmd = new SqlCommand("sp_Stored_Proc_Name_Here", con)) {
      cmd.CommandType = CommandType.StoredProcedure;

      cmd.Parameters.Add("@VariableNameHere", SqlDbType.VarChar).Value = textBoxNameHere.Text;

      con.Open();
      cmd.ExecuteNonQuery();
    }
}
于 2013-04-10T02:39:37.367 に答える
0

ストアド プロシージャが最適なソリューションです。

ただし、プロジェクトにインポートしなくても、ADO.NET を使用してこれらのストアド プロシージャを呼び出すことができます。

ストアド プロシージャは SQL インジェクションに対して安全です

于 2013-04-10T02:40:17.817 に答える
0

これを使用して、アプリのパフォーマンスを向上させます。

1) 呼び出し時に TVP (Table-Valued-Parameter) を受け入れるストアド プロシージャを作成します。

2)TVPが、ターゲットテーブルの予想されるインデックスに対して列データ型で一致するテーブル値データ型を使用していることを確認してください(これにより、SQLはインデックスまたは必要なものを効果的に使用できます)。

3) プロシージャ内で正しいトランザクション分離レベルを使用します。たとえば、「READ COMMITTED」は、応答が良好です。

4) ストアド プロシージャに "SET NOCOUNT ON" を追加して、T-SQL ステートメントが実行されるたびに proc が ADO​​.Net に通知しないようにします。

5) SqlConnection オブジェクト (C#) で、PacketSize プロパティを 3000 から 8000 の間の値に設定します。適切な応答時間が得られるまで、値を調整します。http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.packetsize.aspx

于 2014-05-06T15:28:37.367 に答える