2014年9月29日 星期一

JQuery的套件Uploadify, 無法使用的替代方法

FireFox必須額外安裝flash player才能使用Uploadify套件, 在要使用該套件的情況下, 遇到不能使用該套件的時後, 自行改寫ajax上傳功能 :


// 上傳頭圖 (上傳圖片到資料夾, 不進行存檔到資料庫, 上傳的圖片名稱會經由程式改成和電影名稱一樣
$('#file_upload').uploadify({
    // .... 省略 uploadify 部分的設定 ....
    onSWFReady: function () {
        // 可以使用 uploadify
    },
    onFallback: function () {
        // 無法使用 uploadify
        // console.log('Flash was not detected or flash version is not supported.');
 
        // 新增一個可上傳檔案的 form
        $('#file_upload').after('<form enctype="multipart/form-data" method="post" name="filefox" id="filefox" style="display: initial;">' +
            // 可加入一些必要的數值到 type="hidden" 欄位
            '<input type="file" name="pic" id="pic">' + // 選圖檔案
            '</form>').remove();
        // 選擇圖片後就自動上傳
        $('#pic').change(function () {
            var fd = new FormData($('#filefox')[0]); // your form element, 使用FormData對象發送文件
            // fd.append("CustomField", "This is some extra data"); // 額外添加對象
            $.ajax({
                type: 'POST',
                url: '/upload/test/',
                data: fd,
                // 如果在 Chrome 上顯示下面這個錯誤 
                // Uncaught TypeError: Illegal invocation (未捕獲類型錯誤:非法調用)
                // 指jQuery的AJAX報錯:檢查jQuery的文檔後發現,如果它不是一個字符串,jQuery嘗試將數據轉換成一個字符串。
                processData: false, // 在這裡告訴jQuery不要碰我的數據
                contentType: false, // 防止jQuery來為你添加一個Content-Type頭
                success: function (data) {
                    changeBanner(true);
                }
            });
        });
    }
});

2014年9月22日 星期一

LINQ to Entities 使用 rank / row_number / dense_rank 技巧


T-SQL

    rank

        遇到相同數值會給相同的排名, 其後的排名則跳過, 例如: 1,2,2,4 (會重複號碼, 也會跳號)

    row_number

        遇到相同數值會依其他的依據來排名, 例如: 1,2,3,4 (不重複號碼, 也不跳號)

    dense_rank

        遇到相同數值會給相同的排名, 其後的繼續排名, 例如: 1,2,2,3 (會重複號碼, 但不跳號)











































======================================================

LINQ to Entities

    rank 

   


    row_number 

          說明 :
TopicSortingRank.ToList() 後才能使用在 .Select 中使用索引, 否則會出現 NotSupportedException 的錯誤 :
LINQ to Entities does not recognize the method 'System.Linq.IQueryable`1[<>f__AnonymousType0`3[System.Int32,System.Decimal,System.Int32]] Select[TopicSortingRank,<>f__AnonymousType0`3](System.Linq.IQueryable`1[HappyMovie.Model.TopicSortingRank], System.Linq.Expressions.Expression`1[System.Func`3[HappyMovie.Model.TopicSortingRank,System.Int32,<>f__AnonymousType0`3[System.Int32,System.Decimal,System.Int32]]])' method, and this method cannot be translated into a store expression. 
 

    dense_rank :

               








     


















2014年9月9日 星期二

使用 Group By 組合某一個欄位的數值成為一個字串

假設有一個資料表TopicItem :




















想要看VideoId有哪些TopicId, 所以想組合成:




















語法 :

select
    VideoId,
    STUFF
    (
        (
            select DISTINCT ',' + convert(varchar(10),TopicId) from TopicItem where VideoId = a.VideoId
             FOR XML PATH ('')
   ), 1, 1, ''
     ) as Topics
from TopicItem a
group by VideoId