2011-01-19 8 views
1

私は自分自身のDLL(データアクセス層用)を持っています。私はエスケープ文字技術を使用してユーザーの入力ミスを防ぎましたが、最近はすべての可能なエラーを防ぐためにパラメータ化されたクエリを使用してクラスを強化することにしました。変更は簡単か困難か?パラメータ化されたクエリの問題

パラメータ化クエリを使用するようにクエリを変換する方法はありますか?

アイデアを明確にするために、サンプルコードをいくつか表示してください。

答えて

1

これは私がC#.netとSQL serverでやる方法です。

string sQuery = @"INSERT INTO [UserJob] 
             (
             [SIJCJOBID], 
             [SIJCCHDID], 
             [UserID], 
             [SageDatabaseID], 
             [MaxLineValue], 
             [MaxAuthorisationValue], 
             [UpdatedDate], 
             [UpdatedUser] 
            ) 
             VALUES 
             (
             @SIJCJOBID, 
             @SIJCCHDID, 
             @UserID, 
             @SageDatabaseID, 
             @MaxLineValue, 
             @MaxAuthorisationValue, 
             @UpdatedDate, 
             @UpdatedUser 
            ) 
             SELECT SCOPE_IDENTITY() AS 'ID'"; 

        using (SqlCommand oSqlCommand = new SqlCommand(sQuery)) 
        { 
         oSqlCommand.Parameters.AddWithValue("@SIJCJOBID", this.SIJCJOBID); 
         oSqlCommand.Parameters.AddWithValue("@SIJCCHDID", this.SIJCCHDID); 
         oSqlCommand.Parameters.AddWithValue("@UserID", this.UserID); 
         oSqlCommand.Parameters.AddWithValue("@SageDatabaseID", this.SageDatabaseID); 
         oSqlCommand.Parameters.AddWithValue("@MaxLineValue", this.MaxLineValue); 
         oSqlCommand.Parameters.AddWithValue("@MaxAuthorisationValue", this.MaxAuthorisationValue); 
         oSqlCommand.Parameters.AddWithValue("@UpdatedDate", DateTime.Now); 
         oSqlCommand.Parameters.AddWithValue("@UpdatedUser", StaticStore.CurrentUser != null ? StaticStore.CurrentUser.UserName : "SYSTEM"); 

         using (DataTable dt = DataTier.ExecuteQuery(oSqlCommand)) 
         { 
          if (dt.Rows.Count == 1) 
          { 
           int.TryParse(dt.Rows[0]["ID"].ToString(), out m_UserJobID); 
          } 
         } 
       } 
関連する問題