ASP.NET筆記之 圖庫(kù)權(quán)限設(shè)置的方法_.Net教程
推薦:判斷WebBrowser瀏覽器網(wǎng)頁(yè)加載完成的處理方法.net 中通過(guò) SqlConnection 連接 sql server,我們會(huì)發(fā)現(xiàn)第一次連接時(shí)總是很耗時(shí),但后面連接就很快,這個(gè)其實(shí)和SqlConnection 的連接池機(jī)制有關(guān),正確的理解這個(gè)連接池機(jī)制,有助于我們編寫(xiě)高效的數(shù)據(jù)庫(kù)應(yīng)用程序。
1、通過(guò)一個(gè)實(shí)例來(lái)介紹圖庫(kù)權(quán)限,其中涉及到數(shù)據(jù)庫(kù)的應(yīng)用,在visual studio 2010 連接到數(shù)據(jù)庫(kù) 中創(chuàng)建數(shù)據(jù)集及數(shù)據(jù)表可能會(huì)出現(xiàn)無(wú)法遠(yuǎn)程連接的錯(cuò)誤,具體ide解決方案
可以參考
2、這個(gè)實(shí)例,是通過(guò)輸入用戶名和密碼判斷該用戶是普通用戶還是收費(fèi)用戶,然后進(jìn)入下載圖片列表,非用戶點(diǎn)擊下載是轉(zhuǎn)到跳轉(zhuǎn)頁(yè)面提示,普通用戶下載圖片是帶水印的
試用圖片,而收費(fèi)用戶下載圖片是原始版圖片。在登陸的時(shí)候,同時(shí)設(shè)置錯(cuò)誤登陸次數(shù)限制以及嘗試登陸時(shí)間間隔要求。
這個(gè)過(guò)程需要建立數(shù)據(jù)表以及數(shù)據(jù)集:建一個(gè)DAl文件夾存放,數(shù)據(jù)集存放在APP_Date文件夾下,以確保數(shù)據(jù)的安全性
建數(shù)據(jù)表如下:

數(shù)據(jù)庫(kù)語(yǔ)句如下:
SELECT ID, sUserName, sPassword, iLevel, sErrorTime, sLastErrorTime FROM T_userInfo
SELECT ID, iLevel, sErrorTime, sLastErrorTime, sPassword, sUserName FROM T_userInfo WHERE (ID = @ID)
SELECT ID, iLevel, sErrorTime, sLastErrorTime, sPassword, sUserName FROM T_userInfo WHERE (sUserName = @sUserName)
UPDATE T_userInfo Set sErrorTime=IsNULL(sErrorTime,0)+1,sLastErrorTime=getdate() where ID=@ID
UPDATE T_userInfo Set sErrorTime=0 where ID=@ID
登陸頁(yè)面:login.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="login.aspx.cs" Inherits="圖片下載.login" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
<asp:Label ID="Label1" runat="server" Text="用戶名:"></asp:Label>
<asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
<asp:Label ID="lablwarn" runat="server" BackColor="#FF3300"
BorderColor="#FF3300" Visible="False"></asp:Label>
<br />
<asp:Label ID="Label2" runat="server" Text="密碼 : "></asp:Label>
<asp:TextBox ID="txtPassword" runat="server" TextMode="Password" ></asp:TextBox>
<br />
<br />
<asp:Button ID="btnLogin" runat="server" onclick="btnLogin_Click" Text="登陸" />
</form>
</body>
</html>
登陸頁(yè)面:login.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using 圖片下載.DAL.DataSetPicTableAdapters;
namespace 圖片下載
{
public partial class login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnLogin_Click(object sender, EventArgs e)
{
T_userInfoTableAdapter adapter = new T_userInfoTableAdapter();
var data = adapter.GetDataByUserName(txtUserName.Text);
if (data.Count <= 0)
{
lablwarn.Text = "用戶名不存在";
lablwarn.Visible = true;
}
else {
//LinQ的single的方法,返回為一條數(shù)據(jù)
//數(shù)據(jù)為0 或者或者多條,則拋出異常,把錯(cuò)誤扼殺在搖籃中
var user = data.Single();
//判斷錯(cuò)誤時(shí)間和錯(cuò)誤次數(shù)是否為空
//計(jì)算當(dāng)前時(shí)間和和上次錯(cuò)誤分鐘差
if (!user.IssErrorTimeNull() && !user.IssLastErrorTimeNull()) {
double time = (DateTime.Now - user.sLastErrorTime).TotalMinutes;
if (time <= 30 && user.sErrorTime > 5)
{
lablwarn.Text = "輸入密碼錯(cuò)誤次數(shù)過(guò)多,請(qǐng)等待30分鐘再重新輸入";
lablwarn.Visible = true;
return;
}
}
if (user.sPassword == txtPassword.Text)
{
Session["是否登陸"] = true;
Session["登陸的ID"] = user.ID;
lablwarn.Text = "登陸成功,歡迎回來(lái)";
lablwarn.Visible = true;
//清空錯(cuò)誤次數(shù)
adapter.ResertTimeById(user.ID);
Context.Response.Redirect("Pic_list.htm");
//然后Redirect到其他頁(yè)面
}
else {
adapter.IncErrorTimeById(user.ID);
lablwarn.Text = "密碼錯(cuò)誤,請(qǐng)重新輸入";
lablwarn.Visible = true;
}
}
}
}
}
/*出現(xiàn)錯(cuò)誤:在與 SQL Server 建立連接時(shí)出現(xiàn)與網(wǎng)絡(luò)相關(guān)的或特定于實(shí)例的錯(cuò)誤。
* 未找到或無(wú)法訪問(wèn)服務(wù)器。請(qǐng)驗(yàn)證實(shí)例名稱是否正確并且 SQL Server 已配置為允許遠(yuǎn)程連接。
* (provider: SQL Network Interfaces, error: 26 - 定位指定的服務(wù)器/實(shí)例時(shí)出錯(cuò))
*
* 解決:
*/
下載列表頁(yè)面:Pic_list.htm
<a href="Pic_download.ashx?fileName=11.jpg">圖片1</a>
<a href="Pic_download.ashx?fileName=11.jpg">圖片2</a>
<a href="Pic_download.ashx?fileName=11.jpg">圖片3</a>
下載列表頁(yè)面:Pic_download.ashx
using System.Linq;
using System.Web;
using 圖片下載.DAL.DataSetPicTableAdapters;
using System.Web.SessionState;
using System.Drawing;
namespace 圖片下載
{
/// <summary>
/// Pic_download 的摘要說(shuō)明
/// </summary>
public class Pic_download : IHttpHandler,IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
if (context.Session["是否登陸"] == null)
{
context.Response.Redirect("Target.htm");
}
else {
string fileName = context.Request["fileName"];
//報(bào)頭
context.Response.ContentType="image/JPEG";
string newFileName = HttpUtility.UrlEncode(fileName);
context.Response.AddHeader("Content-Disposition", "attachment:filename=" + newFileName);
//根據(jù)ID獲取數(shù)據(jù)
int user_id = (int)context.Session["登陸的ID"];
T_userInfoTableAdapter adapter = new T_userInfoTableAdapter();
var data = adapter.GetDataById(user_id);
var user = data.Single();
if (user.iLevel == 0) //普通用戶
{
using (System.Drawing.Bitmap bitImage = new System.Drawing.Bitmap("image/" + fileName))
{
//設(shè)置畫(huà)布
using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitImage))
{
g.DrawString("免費(fèi)用戶試用——"+user.sUserName, new System.Drawing.Font("宋體", 20),Brushes.Red, 0, 0);
}
//保存到輸出流中
bitImage.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
else//收費(fèi)用戶
{
context.Response.WriteFile("image/"+fileName);
}
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
跳轉(zhuǎn)頁(yè)面:Target.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>跳轉(zhuǎn)中</title>
</head>
<body>
請(qǐng)先登錄,頁(yè)面將在5秒以后轉(zhuǎn)向登陸頁(yè)面,如果
您想立即進(jìn)入登錄界面,請(qǐng)<a href="login.aspx">點(diǎn)擊這里</a>
<br/> 還剩<div id="leftDiv"></div>秒
</body>
</html>
<script type="text/javascript">
var leftSecond = 5;
setInterval(function () {
if (leftSecond <= 0) {
window.location.href = "login.aspx";
}
document.getElementById("leftDiv").innerHTML = leftSecond;
leftSecond--;
}, 1000)
</script>
總結(jié):
(1、最大的問(wèn)題就是遇到數(shù)據(jù)庫(kù)遠(yuǎn)程連接的問(wèn)題,不過(guò)通過(guò)了解才知道SQL server 2008不默認(rèn)支持,需要一番設(shè)置,具體的流程:SQL Server 2008 R2:error 26 開(kāi)啟遠(yuǎn)程連接詳解
詳細(xì)出處參考:
(2、獲取context.Request等需要解析IRequiresSessionState接口
分享:SQL Server 2008 R2:error 26 開(kāi)啟遠(yuǎn)程連接詳解本篇文章小編為大家介紹,SQL Server 2008 R2:error 26 開(kāi)啟遠(yuǎn)程連接詳解。需要的朋友參考下
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- C#教程:Assembly類訪問(wèn)程序集信息
- 基于.NET BitmapImage 內(nèi)存釋放問(wèn)題的解決方法詳解
- 淺談ASP.NET2.0中配置文件的加密與解密
- c#.net函數(shù)列表
- 無(wú)法獲取ADO.NET Dataset內(nèi)存
- ASP.NET實(shí)現(xiàn)頁(yè)面間值傳遞的幾種方法
- 淺談ASP.NET開(kāi)發(fā)下的MVC設(shè)計(jì)模式的實(shí)現(xiàn)
- 點(diǎn)擊提交按鈕后DropDownList的值變?yōu)槟J(rèn)值實(shí)現(xiàn)分析
- 減少.NET應(yīng)用程序內(nèi)存占用的一則實(shí)踐
- .NET中應(yīng)用程序內(nèi)共享UdpClient聯(lián)機(jī)的實(shí)現(xiàn)方法
- 相關(guān)鏈接:
- 教程說(shuō)明:
.Net教程-ASP.NET筆記之 圖庫(kù)權(quán)限設(shè)置的方法
。