2011-09-14 1 views
-2

これは私の一般的なデータベース接続クラスです。私はこのクラスを使ってWebサイトからのクエリを実行しています。パフォーマンスを向上させるために、これに関するあなたの提案は何でしょうか。ありがとうございました。このC#4.0 MSSQL 2008 R2データベース接続クラスを改善できますか? - EXPERT質問

MSSQL 2008 R2 SP1 - マイクロソフトのVisual Studio 2010 SP1、C#4.0 - ASP.net 4.0

クラス

using System; 
using System.Collections.Generic; 
using System.Collections; 
using System.Linq; 
using System.Web; 
using System.Data.Sql; 
using System.Data.SqlClient; 
using System.Data; 
using System.IO; 

/// <summary> 
/// Summary description for DbConnection 
/// </summary> 
public class DbConnection 
{ 
    public static string srConnectionString = "server=localhost;database=myDB;uid=sa;pwd=MYPW;"; 

    public DbConnection() 
    { 

    } 

    public static DataSet db_Select_Query(string strQuery) 
    { 
     DataSet dSet = new DataSet(); 

     try 
     { 
      using (SqlConnection connection = new SqlConnection(srConnectionString)) 
      { 
       connection.Open(); 
       SqlDataAdapter DA = new SqlDataAdapter(strQuery, connection); 
       DA.Fill(dSet); 
      } 
      return dSet; 
     } 

     catch (Exception) 
     { 
      using (SqlConnection connection = new SqlConnection(srConnectionString)) 
      { 
       if (srConnectionString.IndexOf("select Id from tblAspErrors") != -1) 
       { 
        connection.Open(); 
        strQuery = strQuery.Replace("'", "''"); 
        SqlCommand command = new SqlCommand("insert into tblSqlErrors values ('" + strQuery + "')", connection); 
        command.ExecuteNonQuery(); 
       } 
      } 
      return dSet; 
     } 
    } 

    public static void db_Update_Delete_Query(string strQuery) 
    { 
     try 
     { 
      using (SqlConnection connection = new SqlConnection(srConnectionString)) 
      { 
       connection.Open(); 
       SqlCommand command = new SqlCommand(strQuery, connection); 
       command.ExecuteNonQuery(); 
      } 
     } 
     catch (Exception) 
     { 
      strQuery = strQuery.Replace("'", "''"); 
      using (SqlConnection connection = new SqlConnection(srConnectionString)) 
      { 
       connection.Open(); 
       SqlCommand command = new SqlCommand("insert into tblSqlErrors values ('" + strQuery + "')", connection); 
       command.ExecuteNonQuery(); 
      } 

     } 
    } 
} 
+0

1)性能をチューニングする前にボトルネックを特定しましたか? – Andrey

+1

2) 'catch(Exception)'にロジックを書くことは決してありません。エラー処理コード – Andrey

+1

が必要です。データベースがトランザクション/接続で圧倒された場合、その負担を増やすことは意味がありません。 – WiseGuyEh

答えて

1

1)どのようにstrQueryが施されていないに渡さ確認していますSQLインジェクション?

2.)nlogやlog4netなどのロギングフレームワークを使用します。これにより、設定ファイルを使用するだけで、エラーログ(ファイル、電子メール、データベース)をどこに格納するかを簡単に指定できます。

あなたのログではなく、このようなものになるだろう:

try 
{ 
    using (SqlConnection connection = new SqlConnection(srConnectionString)) 
    { 
     connection.Open(); 
     SqlCommand command = new SqlCommand(strQuery, connection); 
     command.ExecuteNonQuery(); 
    } 
} 
catch (Exception ex) 
{ 
    log.ErrorFormat("strQry: {0}", strQuery); 
    log.Error(ex); 
} 

3)使用SecureString

public static SecureString srConnectionString = "server=localhost;database=myDB;uid=sa;pwd=MYPW;"; 

4)DBがある場合は、DBへの書き込みエラーしようとしている方法ダウン?キャッチされない例外を生成します...

+0

このクラスを使用して作成されたすべてのクエリは、ユーザーによって生成されたものではありません。 SQLインジェクションへ。私はユーザーが異なるメソッドを生成するために使用しています。 dbはこれを下回ることはありません:Dこのログはどこに保存されていますか? – MonsterMMORPG

+0

@MonsterMMORPG設定ファイルにログの場所を指定することができます。それは、ファイルのディレクトリや電子メールまたはデータベースに格納されている可能性があります(それはあなたのアプリケーションのものとは異なるデータベースでもあります)。 – clyc

関連する問題