sql數據過濾

 

一. 查找重複記錄

1. 查找全部重複記錄

Select * From 表 Where 重複字段 In (Select 重複字段 From 表 Group By 重複字段 Having Count(*)>1)

2. 過濾重複記錄(只顯示一條)

Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title)

注:此處顯示ID最大一條記錄

二. 刪除重複記錄


1. 刪除全部重複記錄(慎用)

Delete 表 Where 重複字段 In (Select 重複字段 From 表 Group By 重複字段 Having Count(*)>1)

2. 保留一條

Delete HZT Where ID Not In (Select Max(ID) From HZT Group By Title)

三. 過濾select查詢得到的重複數據

1. 過濾一次select查詢中的重複數據:

select distinct HZD from t_Table where MZD in (...)

     distinct

2. 過濾兩次select查詢中的重複數據:

select。。。where 。。(select 。。。。。。union select。。。。)

介紹幾個SQL指令:

UNION ,用於獲取兩個結果集的並集,會自動去掉結果集中的重複行,並會以第一列的結果進行排序

INTERSECT ,用於獲取兩個結果集的交集,並且以第一列排序

MINUS ,用於獲取結果集的差集(或者說補集),顯示第一個結果集存在的,第2個結果集不存在的數據

UNION ALL ,與UNION相似,不同的是UNION ALL不會自動去處重複行,也不會以任何列排序

Ltrim,Rtrim ,去除左右的不同字符串

以上個指令的具體用法去查資料,在此做個備忘

posted @ 2009-06-18 09:25 失憶的硬盤 閱讀(30) | 評論 (0) |

2009年2月20日

從服務器上傳和下載

 

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

上傳

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

            GetDb_IT myGetDb_IT = new GetDb_IT();
            SqlDataReader dr;
            string mysql = "";
            string DB_Path="";
            string path = "";
            DB_Path = "Document/" + Path.GetFileName(myFU.PostedFile.FileName);
            mysql = "select 路徑 from 文檔管理 where 項目號='" + Session["PNO"].ToString() + "'";
            dr = myGetDb_IT.GetDataReader(mysql);
            if (dr.Read())
            {
                path = Server.MapPath(DB_Path);
                myFU.PostedFile.SaveAs(path); //保存文件
                myLBL.Text = "上傳成功!";
                mysql = "update 文檔管理 set 路徑='" + DB_Path + "',上傳人='" + HttpUtility.UrlDecode(Request.Cookies["User"].Value).ToString().Trim()+"',上傳時間='"+System.DateTime.Now.ToShortDateString()+"' where 項目號='"+Session["PNO"].ToString()+"'";
                myGetDb_IT.Update(mysql);
            }
            dr.Close();
            myGetDb_IT.close();

 

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

下載

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

            string fileName = HttpUtility.UrlEncode("aaaa.xls").ToString();
            string filePath = Server.MapPath(dr["路徑"].ToString());//路徑
            FileInfo fileInfo = new FileInfo(filePath);
            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();
            Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
            Response.AddHeader("Content-Length", fileInfo.Length.ToString());
            Response.AddHeader("Content-Transfer-Encoding", "binary");
            Response.ContentType = "application/octet-stream";
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
            Response.WriteFile(fileInfo.FullName);
            Response.Flush();
            Response.End();

posted @ 2009-02-20 15:54 失憶的硬盤 閱讀(20) | 評論 (0) |

2009年2月11日

推薦一個操作Zip文件的開源類庫:DotNetZip (轉)

 

DotNetZip 是一個短小易用的用來操作 zip 文件的 .NET 類庫,支持.NET的任何語言,可很方便的創建,讀取,和更新zip文件。而且還可以使用在.NETCompact Framework中。

下面是一些簡單的例子:

1.加密壓縮:

using 
(ZipFile zip = new 
ZipFile())
{
zip.Password = sPassword; //set pwd
zip.AddDirectory(sZipDir);
zip.Save(sSavePath + @"/" + sSaveName);
}

2.向壓縮文件中添加:

using 
(ZipFile zip = new 
ZipFile("Backup.zip"
))
{
zip.Password= "123456!" ;
zip.AddFile("ReadMe.txt" );
zip.AddFile("7440-N49th.png" );
zip.AddFile("2005_Annual_Report.pdf" );
zip.Save();
}

3.解壓縮到制定目錄:

using 
(ZipFile zip = ZipFile.Read("D://test//2007.zip"
))
{
foreach (ZipEntry e in zip)
{
Console.WriteLine("file name:{0}" , e.FileName);
Console.WriteLine(e.Comment);
e.Extract("D://test//pwdata" , true ); // overwrite == true
}
}

 

其他詳細的使用請參考:http://www.codeplex.com/DotNetZip

 

原文:http://www.cnblogs.com/carysun/archive/2009/02/11/dotnetzip.html

posted @ 2009-02-11 08:40 失憶的硬盤 閱讀(27) | 評論 (0) |

2008年12月22日

在線勸說:7種說服人們網絡購買的方法

 

說服不是什麼高科技。它需要理解人性的各方面,這些方面通常是自動的或在人類潛意識層面工作。以下是7種說服人們的方法。

1.Show what others are doing 向人們展示其他人在做什麼

人們觀察他人,並經常模仿他人的行爲,尤其是在一些他們不確定的事情上。這種心理現象被稱爲“社會證明”。人們會感覺安心,並且經常以他人的行爲爲基礎進行決策。他們假設他人擁有更多的知識或者比他們自己知道得更多。

你能夠通過以下方式增強在線社會證明:

-          展示最熱門的條目。

-          展示“買了這些了顧客還買了哪些”。

-          展示最暢銷的東西。

-          展示證明書或者獎狀。

另外,人們會做那些他們所喜歡的人正在做的事。

2.Show user-generated reviews 提供用戶評論

用戶評論會對人們的購買決策產生巨大的影響。由於web 2.0和社會性媒體的快速成長,用戶評論成爲網站設計的必要組成部分。讓你的用戶在網站上寫評論,讓他們對產品和服務進行總體評級——畢竟,這些是你網站的免費內容。與營銷 人員相比,網絡用戶更願意相信那些像他們一樣的用戶所說的話。對於旅遊和電子產品網站來說,評論尤其重要。

人們通常需要查看用戶評論,如果他們在你的網站上找不到評論,他們會到別處去看。在網絡上沒有任何東西可以隱藏起來,因爲你必須將他們保存在你的網站上。Figleaves15和UK Apple store16在這方面就做得很好。

另外,不要害怕負面評論。用戶在一英里之外就能聞得出來這個網站是否被“編輯”過,這會讓他們不相信你說的任何話。你應該準備好對顧客的負面評論進行快速的反應,而不是刪除。

3.Show scarcity of products 展示商品的稀缺性

稀缺產生需求,並鼓勵人們更快地購買。人們想要那些他們認爲他們不能擁有的東西,社會心理學表明,失去是一種比得到更強烈的感情。因此,一個失去100元的人所推動的滿足感是一個僥倖獲得100元的人所得到的滿足感的2倍左右。

你能夠通過展現以下的詞語來表現稀缺:

-僅剩1星期

-只有兩個庫存

-最後清倉

-暫無商品,添加至期望清單

-此商品還剩2天4小時3分17秒售罄 (可用計時器)

Webcredible在它的網站上展示剩餘培訓課程的數量。該數量每日遞減,只到這些課程都被預訂出來。這樣做給訪問者一種緊迫的感覺,他們需要在這些課程都賣出去之間預訂。關於決策的研究也表明,與人們從來沒有擁有某樣物件相比,當人們感覺他即將失去該物時,他會認爲此物更有價值。

4. Persuade with pictures & videos 通過圖片和視頻來說服

在產品銷售 方面,尤其對高價值和奢侈性產品,圖像是一種非常具有說服性的工具。因此,確保提供商品的高清晰圖片。他讓人們對其將要購買的產品放心大有幫助。

圖片必須:

-擁有專業的質量

-提供不同的觀察視角

-可放大的

-說服大小和使用場景

Oli17是一個賣衣服的網站,已經走在了前面。他們有一個15秒鐘的視頻片段,讓模特們身穿他們的衣服,走着貓步,這讓你對商品的外觀擁有更好的感覺和感受。隨着帶寬的增長,這可能是一些網站未來的發展趨勢。看視頻比閱讀所需要的努力少得多,並能夠提供更豐富的體驗。記得讓用戶能夠選擇,而不是在打開網站時,自動播放視頻。

5. Cross- and up-sell 交叉銷售 和提升銷售

那個建議“嘿,爲什麼我們不問顧客是否要點炸土豆條?”的人會變得更強。一旦人們決定要購買,說服他們買更多的東西將會變得容易,因爲他們的一隻腳已經踏進門裏了。在網絡上,這一原理仍然有效。

不要低估交叉銷售 和提升銷售所帶來的潛在利潤。像在真實商店裏一樣,向用戶展示相關商品和額外產品。這會使人們更快和更容易的購買更多商品。例如,瀏覽一下Ocado18上的百吉餅,他們仍然會在你付帳的時候向你展示奶油乾酪。他們展示任何你可能錯過的東西,一個說服你買更多東西的聰明策略。

6. Show authority 展示權威

權威原理表明,我們更容易被權威所說服。如果Tiger Woods對你的完全高爾夫教程提供一些建議,你更傾向於聽他而不是你的同學Bob給出的同樣建議。同樣,展示權威和專家的網站更容易被相信。對於B2B網站來說,這更重要。

你可以通過以下方式展示權威:

-表明你是一個專家

-展示第三方網站的數據和鏈接

-參考政府和權威機構

-展示權威的符號和圖片

7. Allay people's fears 緩和人們的擔心情緒

如果我想退貨怎麼辦?存在隱性的成本嗎?這些是購物者可能有的一些擔心情緒。你需要降低這種情緒如果你想說服人們和你做生意。提前、快速地回答人們這些顧慮能夠對人們產生積極的影響,並減少他們的擔心。

Conclusion 結論

簡單來說,說服就是給你的用戶提供做出適當選擇時所需要的信息,幫助他們信任你並減輕他們的任何顧慮。它不是操縱。記住,這些說服策略只能做到如此——你的網站仍然需要提供好的服務。

posted @ 2008-12-22 14:52 失憶的硬盤 閱讀(17) | 評論 (0) |

2008年9月8日

DataGrid實現自增列、單選、多選 (轉載)

(1)實現自增列
只需要在前臺添加一個模板列,綁定ItemIndex+1就可以了
 <asp:TemplateColumn HeaderText="選擇">
 <ItemTemplate>
 <%# Container.ItemIndex+1%>       
 </ItemTemplate>
 </asp:TemplateColumn>
(2)實現單選
在上面的基礎上,爲這個列加一個radio
 <asp:TemplateColumn HeaderText="選擇">
      <ItemTemplate>
       <%# Container.ItemIndex+1%>
       <input type=radio name="rad" value='<%# Container.ItemIndex+1%>'>
      </ItemTemplate>
     </asp:TemplateColumn>

radio的值也就是自增的1-PageSize
再創建一個按鈕(名字叫單選),爲之添加如下代碼
this.Label1.Text = "選擇的行號:" + Request.Form["rad"].ToString();
這樣簡單的幾步雖然實現了顯示選擇的行號,但是在按下按鈕以後,radio的選擇是不能被保留的,原因是這個radio不是runat=server的,我們需要再爲這個頁面放置一個隱藏域(需runat=server)用來在點擊按鈕的時候保存選擇的radio,在前臺添加<input type="hidden" id="rd" runat="server" name="rd">(注意,不要把這個添加到DataGrid中),然後再在剛纔那個按鈕中添加rd.Value = Request.Form["rad"].ToString();(如果vs.net沒有爲這個HtmlInputHidden申明的話你自己加上protected System.Web.UI.HtmlControls.HtmlInputHidden rd;)。到現在爲止還沒有完成,雖然HtmlInputHidden裏面已經保存了選擇的行號,但是還需要在頁面Load的時候讓這個radio爲選擇狀態,修改Page_Load()爲
private void Page_Load(object sender, System.EventArgs e)
  {
   string js = "";
   js+="<script>/r/n";
   js+="function ld(){/r/n";
   js+="for(i=0;i<document.getElementsByName('rad').length;i++)/r/n";
   js+="if(document.getElementsByName('rad')[i].value==";
   js+="document.getElementById('" + this.rd.ClientID + "').value) ";
   js+="document.getElementsByName('rad')[i].checked=true/r/n";
   js+="}/r/n";
   js+="window.οnlοad=ld/r/n";
   js+="</script>/r/n";
   this.RegisterStartupScript("js",js);
   if(!IsPostBack)
   {    
    SetBind();
   }
  }

下面分析一下以上的這段代碼:

問:爲什麼不把代碼放在 if(!IsPostBack)中呢?
答:放不放還需要明確 if(!IsPostBack)的意思(具體見
http://blog.csdn.net/lovecherry/archive/2005/02/25/301441.aspx 中的說明),其實確切的說應該把這段代碼放到 if(!IsPostBack){}else{放到這裏}來,因爲第一次加載頁面的時候,隱藏域裏面是不可能有東西的(第一次加載頁面你都選擇並且點擊按鈕提交,怎麼會有東西呢?)

問:/r/n是什麼東西?
答:這個是換行,放不放對代碼運行沒有影響,但是如果放了換行的話,在客戶端的呈現可以更加清晰

問:爲什麼取rd的值要用document.getElementById('" + this.rd.ClientID + "').value不用document.getElementById('rd').value 呢?
答:其實在這裏你可以後者,但是要知道一點,就是rd是服務端的控件,在某些情況下,id在客戶端的呈現不是在aspx中你指定的id了,而是控件.ClientID,比如在DataGrid中放置的一些服務器端控件,查看一下源代碼可以看到id是類似DataGrid1__ctl5_Hyperlink1而不是你指定的id了

問:這裏爲什麼不用RegisterClientScriptBlock呢?
答:在這裏,這也是無所謂的你可以使用RegisterClientScriptBlock,因爲這段js是自運行的(js+="window.οnlοad=ld/r/n";這句)的,所以不管在form的開始或是結束呈現都不會影響到結果

(3)實現多選
首先在前臺加入如下的代碼(添加一列)
 <asp:TemplateColumn>
      <ItemTemplate>
       <input type="hidden" id="SelectedID" runat="server"
    value='<%# Container.ItemIndex%>'  NAME="SelectedID"/>
       <asp:CheckBox ID="chkExport" Runat="server" />
      </ItemTemplate>
     </asp:TemplateColumn>

爲頁面加入一個按鈕(名字叫多選),爲之添加以下代碼
foreach(DataGridItem di in this.DataGrid1.Items)
   {
    if(((CheckBox)di.FindControl("chkExport")).Checked==true)
    {
     this.Label1.Text+=this.DataGrid1.DataKeys[int.Parse(((HtmlInputHidden)di.FindControl("SelectedID")).Value)]+"<br>";
    }
   }

點擊了這個按鈕就在label的位置顯示了所有選擇的項目對應的數據表主鍵的值,可以利用這個值進行一些數據庫的操作

比如:
string s="";
   foreach(DataGridItem di in this.DataGrid1.Items)
   {
    if(((CheckBox)di.FindControl("chkExport")).Checked==true)
    {
     s+=this.DataGrid1.DataKeys[int.Parse(((HtmlInputHidden)di.FindControl("SelectedID")).Value)]+",";
    }
   }
   SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);
   SqlCommand comm=new SqlCommand("delete from tb1 where ID in (",conn);
   comm.CommandText+=s.Substring(0,s.Length-1)+")";//刪除最後一個逗號
   conn.Open();   
   comm.ExecuteNonQuery();
   conn.Close();
   SetBind();

你可以再添加兩個按鈕,一個叫選擇所有,一個叫取消所有選擇,爲之分別添加如下代碼
foreach(DataGridItem di in this.DataGrid1.Items)
   {
        ((CheckBox)di.FindControl("chkExport")).Checked=true;
   }


foreach(DataGridItem di in this.DataGrid1.Items)
   {
     ((CheckBox)di.FindControl("chkExport")).Checked=false;
   }

下面分析以上上面的代碼:

問:選擇所有和取消所有選擇的按鈕是提交到服務器的,能否不提交實現?
答:首先明確,模板列中的checkbox是runat=server的,上面說了,在客戶端的呈現id是類似DataGrid1__ctl9_chkExport這樣的,所以在客戶端js取的時候我們只能通過控件.ClientID來取,如果在Page_Load的時候來取的話是取不到的,因爲checkbox是放在DataGrid模板列中的,在Page_Load的時候DataGrid還沒有Created。解決辦法就是同上面單選的一樣,統一使用一個server端的隱藏域來保存多選的項目,然後替換模板列中的<asp:CheckBox>爲html的checkbox,在選擇時候來更改隱藏域中的值(通過js,所以不會提交頁面),同樣在點擊多選按鈕的時候,通過讀取隱藏域中的值來得到選擇的項目,這樣其實是一個代碼以服務端爲主到客戶端爲主的一個轉變,在有的時候服務端和客戶端的交互通過隱藏域是非常方便的。在後續文章中會詳細給出跨頁面多選,同時也實現了客戶端選擇所有和取消所有選擇的例子。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章