RSS

Monthly Archives: July 2011

VẤN ĐỀ LOCKING ĐỐI VỚI CURSOR

  1. 1.      Có 2 chế độ thực hiện việc khóa và nhả khóa đối với cursor
    Chế độ 1
    : Cursor locking
  • Cách thực hiện khóa và nhả khóa trong chế độ này được xác định thông qua câu lệnh set transaction isolation level hoặc select .. with (…lock).
  • Các thiết lập cũng như về isolation đối với cursor hoàn toàn giống với các câu lệnh select bình thường. Tức là khóa sẽ được giữ kể từ khi các dòng dữ liệu được lấy ra cho đến hết giao tác (nếu isolation level là repeatable read hoặc serializable) hoặc được nhả ra ngay sau khi đã lấy được các dòng dữ liệu (nếu isolation level là các mức còn lại).
  • Vấn đề cần quan tâm đối với cursor là thời điểm mà các dòng dữ liệu thực sự được lấy ra. Thời điểm này sẽ phụ thuộc vào loại cursor được khai báo trong câu lệnh Declare Cursor (xem thêm trong Book Online về câu lệnh này
  • Cú pháp câu lệnh Declare Cursor:

DECLARE cursor_name CURSOR[ LOCAL | GLOBAL ][ FORWARD_ONLY | SCROLL ][ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ][ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ][ TYPE_WARNING ]FOR select_statement[ FOR UPDATE [ OF column_name [ ,…n ] ] ]

  • Nếu loại cursor là static hay keyset thì các dữ liệu thỏa mãn câu lệnh select sẽ thực sự được lấy ra ngay khi ta gọi lệnh Open Cursor. Nghĩa là, ngay sau câu lệnh này thì các dòng dữ liệu bắt đầu bị khóa. Khóa có thể được nhả ngay hoặc được giữ đến cuối giao tác tùy theo isolation level.
  • Nếu loại cursor là Dynamic thì sau câu lệnh Open Cursor dữ liệu vẫn chưa được lấy ra nên vẫn chưa có dòng nào bị khóa. Dữ liệu chỉ được lấy ra sau từng câu lệnh Fetch. Do đó, sau mỗi câu lệnh Fetch, dòng dữ liệu được lấy ra sẽ bắt đầu được khóa. Như vậy, các dòng dữ liệu trong cursor sẽ được khóa 1 cách lần lượt. Việc nhả khóa cũng tương tự như trên.
  • Nếu loại cursor là Fast forward-only thì việc các dòng dữ liệu được lấy ra khi nào là do thành phần query optimizer của sql server quyết định.Do đó, ta không xác định được thời điểm các dòng dữ liệu bị khóa.
  1. Chế độ 2: Cursor concurrency
  • Cách thực hiện khóa và nhả khóa trong chế độ này được xác định thông qua các tùy chọn khi ta khai báo cursor
  • Cú pháp câu lệnh Declare Cursor:

DECLARE cursor_name CURSOR[ LOCAL | GLOBAL ][ FORWARD_ONLY | SCROLL ][ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ][ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ][ TYPE_WARNING ]FOR select_statement[ FOR UPDATE [ OF column_name [ ,…n ] ] ]

  • Nếu thiết lập tùy chọn SCROLL_LOCKS:

Các dòng dữ liệu sẽ lần lượt được khóa bằng update lock ngay sau khi được lấy ra bằng câu lệnh fetch. Thời điểm các dòng dữ liệu được nhả khóa sẽ phụ thuộc vào việc Cursor này có được thao tác bên trong 1 transaction hay không.

  • Nếu như Cursor không được thao tác bên trong 1 transaction thì các dòng dữ liệu sẽ được nhả khóa ngay sau khi dòng kế tiếp được fetch.
  • Nếu như Cursor được thao tác bên trong 1 transaction thì tất cả các dòng dữ liệu chỉ được nhả khóa sau khi kết thúc transaction (bất kể isolation level là gì).
  • Nếu thiết lập tùy chọn  READ_ONLY: Không có dòng dữ liệu nào bị khóa
  • Nếu thiết lập tùy chọn  OPTIMISTIC: Không có dòng dữ liệu nào được khóa. Có thể xem thêm về tác dụng tùy chọn này trong Book Online với từ khóa cursors [SQL Server], concurrency

LOCK ESCALATION

  • Khi 1 transaction yêu cầu đặt lock (shared lock hay exclusive lock) lên 1 số dòng dữ liệu thì sql server sẽ tự động đặt intent lock lên các page hay table chứa các dòng dữ liệu đó (có thể xem intent lock là 1 dạng lock tiềm tàng (potential) vì nó có khả năng nâng lên thành 1 lock bình thường như shared lock hay exclusive lock).
  • Khi số lượng lock bên trong 1 transaction vượt qua 1 nguỡng giới hạn (threshold) thì intent lock trên table sẽ được nâng lên (escalate) thành 1 lock ở cấp cao hơn (intent exclusive hay exclusive). Đồng thời, các lock trên các dòng, page sẽ được giải phóng.
  • Đối với SQL Server 6.x, người dùng có quyền thiết lập threshold.
  • Đối với SQL Server 2000, thông số threshold này được tự động thiết lập.
  • Đối với SQL Server 2005 vấn đề Lock Escalation là rất phức tạp
 
Leave a comment

Posted by on July 29, 2011 in Software

 

Microsoft Corporation

Microsoft Corporation
Microsoft XNA Game Studio 4
XNA Game
Microsoft Visio 2010
Visio 2010
Microsoft Windows 7
Windows 7
Microsoft Academic Resource Kit
Academic
Resource Kit
Microsoft Exchange Server 2010
Exchange
Server 2010
Microsoft Expression Design 2
Expression
Design 2
Microsoft Expression Studio 4
ExpressionStudio 4
Microsoft Office Sharepoint Designer 2010
Sharepoint Designer
2010
Microsoft Office Visio 2007
Visio 2007
Microsoft Sharepoint Server 2010
SharepointServer 2010
Microsoft Visual Studio 2010
Studio 2010
Microsoft XNA Game Studio 3
XNA Studio 3
 
Leave a comment

Posted by on July 29, 2011 in IT ABC

 

ASP.NET cơ sở

Chương 1: LÀM QUEN VỚI ASP.NET
1. Giới thiệu về ASP.NET
– Là một công nghệ mang tính cách mạng dùng để phát triển các ứng dụng về mạng hiện nay cũng như trong tương lai.
– Là một phương pháp tổ chức hay khung tổ chức (framework) để thiết lập các ứng dụng mạnh cho mạng dựa trên CLR (Common Language Runtime) chứ không phải là một ngôn ngữ lập trình.

2. Khác biệt giữa ASP.NET và ASP
– ASP.NET được xây dựng lại từ số không, được thay đổi tận gốc rễ và phát triển phù hợp với yêu cầu hiện nay.
– ASP được thiết kế riêng biệt và nằm ở tầng phía trên hệ điều hành Windows và Internet Information Server, do đó các công dụng của nó hết sức rời rạc và giới hạn; trong khi đó ASP.NET là một cơ cấu trong các cơ cấu của hệ điều hành Windows dưới dạng nền hay khung .NET (.NET framework), do vậy, ASP.NET không những có thể dùng các object của các ứng dụng cũ mà còn có thể sử dụng tất cả mọi tài nguyên mà Windows có.
– Tập tin của ASP.NET có phần mở rộng là .aspx, còn tập tin của ASP có phần mở rộng là .asp
– Tập tin của ASP.NET được phân tích cú pháp (parsed) bởi XSPISAPI.DLL, còn tập tin của ASP được phân tích bởi ASP.DLL
– ASP.NET là kiểu mẫu lập trình phát động bằng sự kiện (event driven), còn ASP được thi hành theo thứ tự tuần tự từ trên xuống dưới.
– ASP.NET sử dụng trình biên dịch (compiled code) nên rất nhanh, còn ASP dùng trình thông dịch (interpreted code) do đó hiệu suất và tốc độ phát triển chậm hơn.
– ASP.NET hỗ trợ gần 25 ngôn ngữ lập trình mới với .NET và chạy trong môi trường biên dịch (compiled enviroment), còn ASP chỉ chấp nhận VBScript và JavaScript nên ASP chỉ là một scripted language trong môi trường thông dịch (in the interpreter environment). Không những vậy, ASP.NET còn kết hợp nhuần nhuyễn với XML để chuyển vận các thông tin qua mạng.
– ASP.NET hỗ trợ tất cả các browser và quan trọng hơn nữa là hỗ trợ các thiết bị lưu động (mobiles devices). Chính các thiết bị lưu động, mà mỗi ngày càng phổ biến, đã khiến việc dùng ASP trong việc phát triển mạng nhằm vươn tới thị trường mới đó trở nên vô cùng khó khăn.

3. Phương pháp làm việc trong mạng
a. Kiểu mẫu Request / Response
Kiểu mẫu này chính là toàn bộ phương pháp làm việc theo kiểu Client / Server hiện dùng với ASP. Gồm 4 bước:
– Client (thông qua Internet Browser) xác định vị trí của Web Server qua 1 URL, ví dụ như: http://www.tuvantinhoc.com
– Client sẽ yêu cầu được tham khảo 1 trang trong mạng đó và thường là trang chủ (home page), ví dụ như: index.html hay default.htm.
– Server đáp ứng bằng cách hoàn trả hồ sơ mà Client đã yêu cầu trước đây.
– Client nhận được hồ sơ gửi về và hiển thị trong browser của mình.
* Lưu ý: một khi Client đã nhận được hồ sơ rồi thì quá trình trao đổi qua lại kết thúc ngay. Sau đó Server và Client không còn liên hệ.

b. Kiểu mẫu event-driven
– Trong kiểu mẫu này, Server sẽ không chờ Client yêu cầu tham khảo 1 trang nào đó trong mạng mà Server đã bố trí và kế hoạch sẵn trước tất cả mọi tình huống để có thể hàng động kịp thời mỗi khi Client quyết định làm 1 điều gì đó. Ta gọi đó là ‘response to your action, còn trong kiểu mẫu trước là ‘response to your request’. Như vậy, ASP.NET có thể phát hiện ra các hành động của Client để phản ứng cho thích hợp.
– Server có thể làm được điều này là dựa vào tiến trình xử lý linh động ở Client (còn gọi là clever client-side processing) để thực hiện kiểu mẫu event-driven này. Tiến trình xử lý ở Client xảy ra khi ta bố trí mã nguồn thích hợp mà Client có thể hiểu được trong các trang ta gửi về cho Client.
* Lưu ý: mặc dù các web page đều nằm ở Server nhưng mã nguồn lại có thể được thực hiện và xử lý hoặc ở Server hoặc ở Client (Server-Side processing và Client-Side processing) tuỳ theo cách bố trí. Các mã nguồn ở Client và Server là hoàn toàn khác biệt và không có tác động hỗ trợ với nhau. Có nghĩa là máy Client sẽ chịu trách nhiệm thi hành các mã nguồn dành cho mình cũng như máy Server chỉ chạy các mã nguồn dành cho Server.
Thông tin hay nội dung cần thiết ở Server sẽ được chuyển đi dưới dạng ‘plain text command’ để thực hiện các hiệu ứng động (dynamic effect) ở máy Client, ví dụ như: thay đổi hình ảnh (image rollover) hay hiển thị một thông điệp (message box). ASP.NET sẽ dùng các ngôn ngữ mới có trình biên dịch (compiled languages) như C# hay VB.NET để soạn các mã nguồn trong các trang Web ở Server.

4. Net Framework
a. CLR (Common Language Runtime)
– CLR là môi trường để quản lý sự thi hành các mã nguồn (manage the execution of code) mà ta đã soạn ra và biên dịch (write and compile code) trong các ứng dụng. Tuy nhiên, khi biên dịch mã nguồn, ta biên dịch chúng ra thành 1 ngôn ngữ trung gian gọi là Microsoft Intermediate Language (MSIL). Chính MSIL trung gian này là ngôn ngữ chung cho tất cả các ngôn ngữ .NET hiện có, do đó ASP.NET cũng được biên dịch (compile) ra MSIL. Trong khi biên dịch như vậy, các ứng dụng cũng sản xuất ra những thông tin cần thiết để tự quảng cáo chính mình, gọi là metadata. Đến khi chạy 1 ứng dụng, CLR sẽ tiếp quản (take-over) và lại biên dịch (compile) mã nguồn 1 lần nữa ra thành ngôn ngữ gốc (native language) của máy tính trước khi thi hành những tác vụ trong mã nguồn đó.

b. Net Framework Classes
Mọi thứ trong .NET đều là object. Ví dụ như: các trang ASP.NET, các hộp thông điệp hay các nút nhấn.
Các object được tổ chức thành từng nhóm riêng biệt nhe trong 1 thư viện để dễ dàng sử dụng, các nhóm như vậy gọi là namespaces, ta sẽ dùng các namespaces này để nhập (import) các class cần thiết cho ứng dụng của mình.

5. Cài đặt ASP.NET
Để thực thi trang ASP.NET cần phải cài đặt:
– Internet Information Services (IIS) và tạo thư mục ảo Virtual Directory.
– MS Visual Studio.NET

Chương 2. XÂY DỰNG TRANG ASP.NET

I. Phân tích trang ASP.NET đầu tiên

CHƯƠNG 2. XÂY DỰNG TRANG ASP.NET
1. Phân tích ví dụ đầu tiên
<%@ Page Language=”vb” AutoEventWireup=”false” Codebehind=”WebForm1.aspx.vb” Inherits=”welcome1.WebForm1″%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”>
<script runat=”server”>
Sub Page_Load(Sender As Object, E As EventArgs)Handles MyBase.Load
lblWelcome.Text=”Chào mừng đến với ddth.com!”
End Sub
</script>
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name=”GENERATOR” content=”Microsoft Visual Studio .NET 7.1″>
<meta name=”CODE_LANGUAGE” content=”Visual Basic .NET 7.1″>
<meta name=”vs_defaultClientScript” content=”JavaScript”>
<meta name=”vs_targetSchema” content=”http://schemas.microsoft.com/intellisense/ie5″&gt;
</HEAD>
<body MS_POSITIONING=”GridLayout”>
<form id=”Form1″ method=”post” runat=”server”>
<asp:Label id=”lblWelcome” style=”Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px” runat=”server”
Width=”328px” Height=”56px”></asp:Label>
</form>
</body>
</HTML>

Ta nhận thấy code của trang này được chia thành 3 phần riêng biệt:
Phần 1: <%@ Page Language=”VB” … %> được gọi là Page Directives. Phần này cung cấp cho ASP.NET những thông tin đặc biệt để ASP.NET biết cách mà xử lý cũng như những thông tin dùng trong tiến trình biên dịch (during the compiling process); trong đó, bạn muốn ASP.NET dùng VB.NET làm ngôn ngữ lập trình mặc định (default programming language) cho trang web.

Phần 2: <script runat=Server>…</Script>: còn gọi là Code Declaration Block giống như mã ở Client Side nhưng khác một chút là có kèm theo Runat=Server, đây chính là chỉ thị cho ASP.NET biết thi hành trang này ở Server Side, kiểm soát mọi công việc cần thiết và mã được biên dịch (compiled) thành MSIL. Có thể đặt phần này ở bất kỳ đâu trong trang web.
Sub Page_Load(sender as Object, e as EventArgs) Handles MyBase.Load
lblWelcome.Text=”Chào mừng đến với ddth.com!”
End Sub
Phần code này tạo ra một Procedure có tên là Page_Load() mặc định cho các trang ASP.NET giống như Form_Load trong lập trình ứng dụng. Khi trang được trình bày, ASP.NET sẽ gắn hàng chữ “Xin chào mừng đến với ASP.NET” vào label lblWelcome.

Phần 3: <html>…<html>: đây là nơi bắt đầu code HTML. Phần này chính là hình thức trình bày nội dung của trang được chế biến bởi code ASP.NET trước khi gửi về và hiển thị trong browser của Client. Ngoài ra, ASP.NET cũng cho phép kèm theo những chỉ thị (instructions) trong Code Render Block bắt đầu bằng <% và chấm dứt bằng %>.
Ví dụ: <%Response.Write(“My first page <p>”)%>
để đưa ra những gì bạn muốn làm vào bên trong lòng mã nguồn của phần HTML

1. Phân định code và nội dung
a. Code Inline Model:
Trong kiểu mẫu này, code được viết và giữ (code section) trong các trang ASP.NET nhưng không trộn lẫn với HTML dành cho phần nội dung (Content section):
<%– This is the code section (ASP.NET Code) –%>
<script runat=Server>
Sub Page_Load(sender as Object, e as EventArgs) Handles MyBase.Load
lblWelcome.Text=”Chào mừng đến với ddth.com!”
End Sub
</script>
<%–This is the content section (HTML Code)–%>
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name=”GENERATOR” content=”Microsoft Visual Studio .NET 7.1″>
<meta name=”CODE_LANGUAGE” content=”Visual Basic .NET 7.1″>
<meta name=”vs_defaultClientScript” content=”JavaScript”>
<meta name=”vs_targetSchema” content=”http://schemas.microsoft.com/intellisense/ie5″&gt;
</HEAD>
<body MS_POSITIONING=”GridLayout”>
<form id=”Form1″ method=”post” runat=”server”>
<asp:Label id=”lblWelcome” style=”Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px” runat=”server”
Width=”328px” Height=”56px”></asp:Label>
</form>
</body>
</HTML>

b. Code Behind Model
Một kiểu mẫu khác được áp dụng để phân định code và nội dung là phần code được sắp xếp trong một tập tin khác riêng biệt ở một chỗ lưu trữ khác hẳn chỗ chứa các trang ASP.NET, dĩ nhiên bạn phân chia như vậy thì phải sắp xếp để 2 tập tin riêng biệt đó có thể làm việc với nhau và được biên dịch cũng giống như kiểu mẫu Code Inline.
Public Class WebForm1
Inherits System.Web.UI.Page
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.lblWelcome.Text=”Chào mừng đến với ddth.com!”
End Sub
End Class

2. Tiến trình xử lý
Khi có yêu cầu tham khảo trang web, trước hết ASP.NET sẽ biên dịch (compile) code ở phần Code Declaration Block trong trang AsP.NET. Code được biên dịch thành MSIL, CLR quản lý và sau đó biên dịch thành ngôn ngữ gốc của máy (native machine language) trước khi trang được gửi về browser của Client. Code trong trang web sẽ được lưu trữ một nơi riêng biệt, CLR sẽ thăm chừng luôn phòng trường hợp có thay đổi mã nguồn thì lập tức CLR sẽ biên dịch lại 1 cách tự động trang web đó.
Sau khi trang web được biên dịch, AsP.NET bắt đầu tiến trình xử lý tất cả nguồn mã kể cả các sự cố (events) ví dụ như bạn gõ vài chữ trong hộp Text box hoặc click vào một nút nào đó thì AsP.NET engine sẽ nghiên cứu, khảo sát biến cố đó để quyết định cách phản ứng và thi hành để đáp ứng lại biến cố theo kế hoạch lập trình đã quy định trước. Tiếp theo, AsP.NET sẽ biến đổi tất cả các Server Control trong trang web ra thành những yếu tố HTML tương đương.
Ví dụ: <asp:Label> control thành HTML <span></span> để hiển thị hàng chữ “Xin chào mừng đến với AsP.NET”
Cuối cùng, AsP.NET sẽ gửi kết quả dưới dạng HTML đến Client Browser, Client Browser chỉ nhận được trang web dưới dạng HTML thuần túy. Như vậy có thể dùng bất cứ một web browser nào (không nhất thiết MSIL) cũng có thể hiển thị các trang AsP.NET.

II. Cấu trúc điều khiển
1. Phát biểu If Then
If condition Then
[statements]
End If
Cho phép thực hiện khối lệnh (statements) trong cấu trúc này khi điều kiện (condition) trong phát biểu If là đúng
Khối phát biểu có một phát biểu không xuống hàng thì không cần End If
Ví dụ:
Dim x=10, y=0
If x>0 Then y+=x

2. Phát biểu điều khiển If…Then…Elseif…End if
If condition Then
[statements]
ElseIf elseifconditions Then
[elseifStatements]
Else
[elseStatements]
End If

3. Phát biểu rẽ nhánh Select…Case
Select Case TestExpression
Case Expressionlist
[Statements]
Case Else
[elseStatements]
End Select

TestExpression: là biểu thức bắt buộc, giá trị thuộc một trong các loại dữ liệu sau: Boolean, Byte, Char, Date, Double, Decimal, Integer, Long, Object, Short, Single, String.
Expressionlist: phát biểu yêu cầu nằm trong Case, trong Case có thể là mệnh đề hay biểu thức, chúng cách nhau dấu “,”. Ngoài ra các biểu thức trong Case còn sử dụng từ khóa To để diễn giải khoảng giá trị, Is là biểu thức so sánh.
Ví dụ1:
Case 1 To 4,5,6,7, To 9,11,13, Is>MaxNumber
Ví dụ 2:
Dim Number As Integer=8
Select Number
Case 1 to 5 Response.write(“Từ 1 đến 5”)
Case 6,7,8 Response.write(“Từ 6 đến 8”)
Case 8 to 10 Response.write(“Từ 8 đến 10”)
Case Else Response.write(“Không tồn tại giá trị”)
End Select

4. Phát biểu lặp Do…Loop

Dạng 1:

Do While condition ‘Lặp trong khi
[statements]
[Exit Do]
Loop
Do Until condition ‘Lặp cho đến khi
[statements]
[Exit Do]
Loop

Dạng 2:
Do
[statements]
[Exit Do]
[statement]
Loop {While/Until} condition
+ while: vòng lặp được thực hiện cho đến khi condition có giá trị False
+ until: vòng lặp được thực hiện cho đến khi condition có giá trị True
+ Exit Do: cho phép thoát khỏi vòng lặp Do…Loop
Ví dụ: Phát biểu Do…Loop
Dim Check As Boolean=True
Dim Counter As Integer=0
‘ Vòng lặp ngoài với biến Check
Do
Do while Counter<20
‘ Vòng lặp trong biến Counter
Counter+=1
If Counter=10 then
Check=False
Exit Do
‘ Thoát khỏi vòng lặp trong
End if
Loop
‘ Kết thúc vòng Do…Loop ngoài với biến Counter
Loop Until Check=False
‘ Kết thúc vòng Do…Loop ngoài với biến Check

5. Phát biểu while…End while
Thực hiện nhiều phát biểu khi điều kiện condition có giá trị True như cú pháp sau:
while condition
[statements]
End while

+ condition: là biểu thức luận lý bắt buộc, có giá trị True hay False, nếu condition=Nothing thì condition tương với False.
+ statements: một hoặc nhiều phát biểu thực hiện trong khối While khi condition có giá trị True.
Ví dụ: Phát biểu while…End while
Dim Counter As Integer=0
while Counter<20
Counter+=1
End while
Debug.writeline(“Giá trị của biến Counter: ” & Counter)

6. Phát biểu with…end with
Phát biểu được sử dụng trong khi tham chiếu đến đối tượng đơn, hay cấu trúc; with…end with thực hiện nhiều phát biểu như cú pháp sau:
with object
[statements]
end with

+ object: là biểu thức bắt buộc, có giá trị với bất kỳ kiểu dữ liệu, bao gồm cả các kiểu cơ bản nhất.
Ví dụ: biến myLabel là một biến kiểu Label, sau đó sử dụng phát biểu with để gán các thuộc tính vào biến:
with myLabel
.Height=2000
.width=1000
.Text=”Login me!”
end with

Trong trường hợp đối tượng có thuộc tính mẹ, có thể sử dụng phát biểu with
Ví dụ:
with myObject
.Height=2000
.width=1000
.Text=”Login me!”
with .Font
.Color=Red ‘ Tương đương myObject.Font.Color=Red
.Bold=True ‘ Tương đương myObject.Font.Bold=True
end with
end with

7. Phát biểu For Each…In …Next: lặp lại một nhóm phát biểu cho mỗi phần tử trong mảng hay tập hợp:
For Each element In group
[statements]
[Exit For]
[statements]
Next [element]
+ element: bắt buộc, sử dụng biến này nhận giá trị của phần tử trong (In) mảng hay tổ hợp, kiểu dữ liệu của element phải cùng kiểu dữ liệu của phương thức trong mảng hay tổ hợp group
+ group: biến đối tượng bắt buộc và được tham chiếu như một mảng hay tổ hợp.
Ví dụ: tìm kiếm đối tượng có Caption là Hello trong tập hợp đối tượng MyCollection
Dim Found As Boolean=False
Dim MyObject, MyCollection As Object
For Each MyObject In MyCollection
If(CStr(MyObject.Text=”Hello”)) Then
Found=True
Exit For
End if
Next

8. Phát biểu For…Next
For counter=start To end [Step step]
[statements]
[Exit For]
[statements]
Next [counter]
+ Counter: bắt buộc, kiểu dữ liệu thông thường là Integer
+ Start: bắt buộc, chính là giá trị xuất phát của biến counter, trong trường hợp này start có cùng kiểu dữ liệu với counter và nằm trong phạm vi cho phép.
+ end: bắt buộc, chính là giá trị kết thúc của counter, trong trường hợp này end có cùng kiểu dữ liệu với counter và nằm trong phạm vi cho phép.
+ step: nếu không cung cấp thì mặc định là 1
Trong trường hợp giá trị start lớn hơn giá trị end phải có giá trị (-).
Ví dụ: vòng lặp For tăng
Dim I As Integer
Dim J As Integer
Dim K As Long
For I=0 To 10
For J=0 To 10
K=I+J
Debug.writeLine(K)
Next J
Next I

Ví dụ 2: Vòng For với biến words có giá trị giảm dần, Digit có giá trị tăng dần
Dim words As Integer
Dim Digit As Integer
Dim MyString As String
For words=10 To 1 Step -1
For Digit=1 To 9
MyString=MyString & CStr(Digit)
Next Digit
MyString=Mystring & ” ”
Next words

III. Các phép toán cơ bản
1. Phép toán trừ bằng (-=)

Cú pháp: variable -= expression
Chỉ hỗ trợ các kiểu dữ liệu: byte, short, integer, long, single, double, decimal
Ví dụ:
Dim var1 As Integer=10
Dim var2 As Integer=5
Debug.writeline(“var1: ” & var1)
Var1 -= Var2
Debug.writeLine(“Var1: ” & Var1)

2. Phép toán cộng bằng (+=)
Cú pháp: variable += expression
Chỉ hỗ trợ các kiểu dữ liệu: byte, short, integer, long, single, double, decimal
Ví dụ:
Dim var1 As Integer=10
Dim var2 As Integer=5
Dim strSQL As String
Debug.writeline(“var1: ” & var1)
Var1 += Var2
Debug.writeLine(“Var1: ” & Var1)
strSQL =”Select * From tblCustomer”
Debug.writeLine(“strSQL: ” & strSQL)
strSQL +=” where active=1″
Debug.writeLine(“strSQL: ” & strSQL)

3. Phép toán nhân bằng (*=)
Cú pháp: variable *= expression
Chỉ hỗ trợ các kiểu dữ liệu: byte, short, integer, long, single, double, decimal
Ví dụ:
Dim var1 As Integer=10
Dim var2 As Integer=5
Debug.writeline(“var1: ” & var1)
Var1 *= Var2
Debug.writeLine(“Var1: ” & Var1)

4. Phép toán chia bằng (/=)
Cú pháp: variable /= expression
Chỉ hỗ trợ các kiểu dữ liệu: byte, short, integer, long, single, double, decimal
Ví dụ:
Dim var1 As Integer=10
Dim var2 As Integer=5
Debug.writeline(“var1: ” & var1)
Var1 /= Var2
Debug.writeLine(“Var1: ” & Var1)
* Lưu ý: phép chia bằng (/=) có lấy lẻ

5. Phép toán chia bằng (\=) lấy phần nguyên
Cú pháp: variable \= expression
Chỉ hỗ trợ các kiểu dữ liệu: byte, short, integer, long
Ví dụ:
Dim var1 As Integer=10
Dim var2 As Integer=3
Debug.writeline(“var1: ” & var1)
Var1 \= Var2
Debug.writeLine(“Var1: ” & Var1)
* Kết quả: var1: 10
var1: 3

6. Chuyển đổi dữ liệu
Cách 1: dùng Ctype
Dim AgeString As String
Dim Age As Integer
AgeString=”25″
Age=Ctype(AgeString, Integer)

Cách 2:
Dim AgeString
Dim Age
AgeString=”25″
Age=Cint(AgeString)

Ví dụ làm một trang web tin tức  :

asp_TinTuc 1

Ta thiết kế 1 CSDL để lưu tin tức
– Làm menu động, lấy dữ liệu từ CSDL

– Ta cần 1 bảng chứ menu
– Tiếp theo là bảng đăng nhập
– 1 Bảng để lưu thông tin bài viết

Vì thời gian ở đây chỉ để hiển thị, ko tính toán gì nên để là nvarchar cho dễ thao tác

—————————
Phần Visual để làm

– Ta add vào server explorer để thao tác cho dễ, đỡ phải mở sql server management lên
0. Connectstring từ web đến CSDL (mở web.config)

<appSettings/>

<connectionStrings>
<add name=”ConnectString” connectionString=”Data Source=MANHHUNG-PC;Initial Catalog=TinTuc;Integrated Security=True”/>
</connectionStrings>

<system.web>

1. Tạo 1 fodel App_Code rồi tạo 1 lớp để thao tác với csdl (class: AccessData)

để lấy được connectstring trong web.cofig, bạn phải khai báo using System.Configuration; (đã có sẵn)
– rồi lấy cái name (như video)
điều này rất thuận lợi khi bạn up lên host, chỉ cần sửa connectstring trong webconfig là xong
– Thêm khai báo using System.Data.SqlClient;

public class AccessData
{
private string ConnectString = ConfigurationManager.ConnectionStrings["ConnectString"].ConnectionString;

public SqlConnection GetConnect()
{
return new SqlConnection(ConnectString);
}

//Hàm trả về 1 datatable
public DataTable GetTable(string sql)
{
SqlConnection con = GetConnect();
SqlDataAdapter ad = new SqlDataAdapter(sql, con);
DataTable dt = new DataTable();
ad.Fill(dt);
con.Close();
return dt;
}

//Hàm thực thi lệnh executenonquery
public void ExeCuteNonquery(string sql)
{
SqlConnection con = GetConnect();
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
cmd.ExecuteNonQuery();
con.Close();
cmd.Dispose();
}

//Hàm thực thi lệnh ExecuteScalar để trả về 1 giá trị
public string ExecuteScalar(string sql)
{
SqlConnection con = GetConnect();
con.Open();
SqlCommand cmd = new SqlCommand(sql,con);
string kq = cmd.ExecuteScalar().ToString();
con.Close();
cmd.Dispose();
return kq;
}
public SqlDataReader ExecuteReader(string sql)
{
SqlConnection con = GetConnect();
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataReader reader = cmd.ExecuteReader();
return reader;
}
}

asp_TinTuc 2

– Tạo trang masterpage, nó là cái khung chính của trang mà các trang khác sẽ kế thừa
Như vậy chúng ta sẽ tạo 1 table gồm 4 hàng
add new item mới là masterpage -> nhấn đến mục design -> Tạo bảng với 4 dòng 3 cột, 960 In pixel, Alignment chọn Center
– Nhấn vào td.style2 phần design -> nhấn vào Source -> Nhấn vào Split để dễ làm việc

1. Tìm dòng này

<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
.....
</asp:ContentPlaceHolder> 

cắt đi dán vào <td>
&nbsp;</td> vào phần bị gạch đó

xóa phần khóa của dòng trên đi (tức phần này </asp:ContentPlaceHolder>)
asp:ContentPlaceHolder 

Chính là phần để các trang khác ghi nội dung riêng của mình vào

2. Họ xóa Default.aspx đi (Mình thì thay đổi tên của nó để thử thôi đã vì dung phiên bản khác mà )
Add New Item mới là Web Form lấy tên mặc định là Default.aspx
– lựa chọn Select master page
– Để nguyên tên mặc định là Default.aspx
ta được code

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="Untitled Page" %>

<asp:Content ID=”Content1″ ContentPlaceHolderID=”head” Runat=”Server”>
</asp:Content>
<asp:Content ID=”Content2″ ContentPlaceHolderID=”ContentPlaceHolder1″ Runat=”Server”>
</asp:Content>

– Những phần còn lại đã bị cố định, chỉ có ContentPlaceHolder là trang này có thể đánh vào nội dung

3. Hướng dẫn làm Menu

– Xóa từ menu trong trang nền đó đi
– Tạo 1 sitemap đặt tên Menu.sitemap

Demo tạm

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="" title=""  description="">
<siteMapNode url="Defaul.aspx" title="Trang chủ"  description="" />
<siteMapNode url="google.com.vn" title="Giải trí"  description="" />
<siteMapNode url="dantri.com.vn" title="Game"  description="" />
<siteMapNode url="mp3.zing.vn" title="Ca nhạc"  description="" />
<siteMapNode url="bongda.com.vn" title="Bóng đá"  description="" />
</siteMapNode>
</siteMap

– Vào Navigation chọn Menu nhấn choose a Data Source
+ Nhớ đánh đúng tên sitemap mà mình chọn (ở đây là Menu)
– Nhấn vào SiteMapDataSource – Menu Ở mục SiteMapProvider đặt tên là Menu

4. Chỉnh lại tí trong webconfig

Thêm đoạn code sau (vào web.cofig)

<siteMap defaultProvider="Menu">
<providers>
<add name="Menu" type="System.Web.XmlSiteMapProvider" siteMapFile="~/Menu.sitemap"/>
</providers>

</siteMap>

trước 2 thằng này

</system.web>

<system.codedom>

Là thư mục gốc

5. Nhấn vào Root Node

– phần thuộc tính tìm đến mục Orientation chọn Horizontal là theo chiều ngang
Width chọn 100%
Nhấn vào SiteMapDataSource – Menu trong mục ShowStartingNode chọn False
ShowStartingNode để bằng False nó sẽ không hiện ra nút đầu tiên mà hiện MENU luôn
Nếu để True thì nó xuất hiện nút tam giác, và khi chỉ vào đó thì nó mới hiện MENU

asp_TinTuc 3

Làm Menu cho trang Web, làm Menu 2 lớp lấy từ csdl

thêm code border=”1″ vào

<table align="center" class="style1" border="1"> 

– Giờ ta sẽ tạo trang quản lí Menu, trang này nằm trong quyền của admin nên ta sẽ tạo 1 thư mục Admin để chứa trang này, add vào đây 1 Web Form với tên QuanLiMenu.aspx
* Ta bỏ (không) chọn mục Select master page
– Để làm được Menu 2 lớp bạn thêm trường MenuParent vào
Bản ghi đầu tiên ta để MenuID là 0, ko có tên và ULR
(ảnh)
Như vậy menu game sẽ là con của menu giải trí, khi click vào giải trí sẽ hiện ra menu game cho chúng ta chọn id = 1 tức là game tự ta quy định vậy đi.
Rồi, giờ ta sẽ viết code để nó tự động load lên file sitemap từ đó ta có thể load thành menu
* Nhấn vào Unbound –> Choose Data Source –> <New data source ..> –> Nhấp Database –> OK –> Next –> Next
– Nó sẽ tự tạo 1 connect string mới và lưu vào web.config, lần sau cứ thế sử dụng
Vậy là ta sẽ có 2 connectstring
– Mục Name chọn tbl_Menu –> Tích MenuID và tích MenuName –> Next –>Finish
Mục Select a data field to display in the ListBox –> chọn MenuNam
ô dưới chọn MenuID –> OK
(Ở trên là phần hiện ra cho ta thấy, đặt là MenuNam, ở dưới là giá trị mình chọn)
– Nhấn luôn vào Source để thêm code

AutoPostBack="true" 

WHERE [MenuParent] is NULL 

Ta chỉ chọn các menu mà MenuParent của nó là null vì các menu có MenuParent không null là các menu con, không cần thiết
code
Chọn Menu cha

asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true"
DataSourceID="SqlDataSource1" DataTextField="MenuName" DataValueField="MenuID">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:TinTucConnectionString %>"
SelectCommand="SELECT [MenuID], [MenuName] FROM [tbl_Menu] WHERE [MenuParent] is NULL">
</asp:SqlDataSource> 

– Khi ta thêm 1 menu mới sẽ dựa vào đây để thêm
Dropdowlist ko chọn gì tức ID=0
thì mình sẽ thêm 1 menu cha, còn khi chọn menu thì mình thêm vào chính là menu con của menu đã chọn này

– Nhấn GridView1 mục Choose Data Source chọn New data Source.
Các bước làm cũng tương tự như trên
connectstring vừa tạo lúc nãy giờ cứ thế mà sử dụng
Mục Name vẫn chọn tbl_Menu –> ở đây tích vào ô trên cùng (*)

* Nhấn chuột vào nút thêm bắt đầu viết code

using System.Text;
using System.Data.SqlClient; 

– Ta nhận thấy phần code sau ở Menu.sitemap là không thay đổi nên ta nối vào sb

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="" title=""  description="">

dấu “” có thể thay bằng

<siteMapNode url="Defaul.aspx" title="Trang chủ"  description="" />
<siteMapNode url="google.com.vn" title="Giải trí"  description="" />
<siteMapNode url="dantri.com.vn" title="Game"  description="" />
<siteMapNode url="mp3.zing.vn" title="Ca nhạc"  description="" />
<siteMapNode url="bongda.com.vn" title="Bóng đá"  description="" /> 

là vùng dữ liệu sẽ thay đổi nên ta phải dùng code
– Còn phần này

</siteMapNode>
</siteMap> 

cũng không thay đổi luôn

đoạn giữa
……

SqlDataReader reader = ac.ExecuteReader("select * from tbl_Menu"); // đầu tiên chúng ta sẽ đọc toàn bộ bảng tbl_Menu
while (reader.Read())
{
//Cứ mỗi lần lướt qua 1 menu, ta tìm xem menu đó có menu con không
DataTable dt=ac.GetTable("select MenuName, URL from tbl_Menu where MenuParent=" + int.Parse(reader[0].ToString()) + "");

if (dt.Rows.Count > 0) //Chèn menu có menu con
{
// Thẻ mở
sb.Append(“\n<siteMapNode url='” + reader[2].ToString() + “‘ title='” + reader[1].ToString() + “‘ description='” + “” + “‘>”);// Lưu ý: Trước title có 1 dấu cách, sau là dấu =
for (int i = 0; i < dt.Rows.Count; i++)
{
//Các menu con
sb.Append(“\n<siteMapNode url='” +dt.Rows[i][1].ToString() + “‘ title='” + dt.Rows[i][0].ToString() + “‘ description='” + “” + “‘/>”);// Lưu ý: cho 2 dấu này “‘ sát nhau
}
sb.Append(“\n</siteMapNode>”); //Thẻ đóng của menu cha đây
}
else // Chèn những menu không có menu con
{
if (int.Parse(reader[0].ToString() !=0 && reader[3].ToString == “”))
sb.Append(“\n<siteMapNode url='” + reader[2].ToString() + “‘ title='” + reader[1].ToString() + “‘ description='” + “” + “‘ />”); // Đóng luôn
}
}

sb.Append(“\n</siteMapNode>”);
sb.Append(“\n</siteMap>”);
// Và cuối cùng chúng ta ghi vào file sitemap đó thôi
File.WriteAllText(Server.MapPath(“Menu.sitemap”).ToString(), sb.ToString());

Thêm code

 using System.IO; 

Giả sử đang ở menu 1, chúng ta sẽ tìm xem có menuParent nào có giá trị là 1 không. Nếu không có thì nó không có menu con
Chúng ta sẽ lấy kết quả tìm được cho vào 1 datatable

DataTable dt=ac.GetTable("select MenuName, URL from tbl_Menu where MenuParent=" + int.Parse(reader[0].ToString()) + ""); 

Nếu rows count>0 tức là có kết quả trả về (có menu con)
Chúng ta sẽ hiện ra theo dúng chuẩn
Sửa lại code. Tạo 3 menu con của menu giải trí

<siteMapNode url="giaitri.aspx" title="Giải trí"  description=""  >
<siteMapNode url="game" title="Game"  description="" />
<siteMapNode url="nhac" title="Ca nhạc"  description="" />
<siteMapNode url="video" title="Bóng đá"  description="" />
</siteMapNode>

Menu giải trí lúc này sẽ có cả thẻ đóng và thẻ mở, không như các menu không có menu con
——————————————————————
Khi thêm 1 menu mới, chúng ta phải lấy được menuID lớn nhất hiện tại để tăng lên 1. Vì vậy chúng ta cần 1 hàm tìm MenuID max

DropDownList1.SelectedValue.ToString() 

là menu cha đang được chọn

public int MaxMenuID()
{
int kq = 0;
string sql = "Select Max(MenuID) from tbl_Menu";
try
{
kq = int.Parse(ac.ExecuteScalar(sql));
}
catch
{
kq = 0;
}
return kq;
}

//Khi click thêm
protected void Button1_Click(object sender, EventArgs e)
{
// Đầu tiên,chúng ta insert menu mới vào csdl sau đó gọi hàm WriteSiteMap để ghi lại vào sitemap
// Chúng ta sẽ có 2 trường hợp
// Đầu tiên là dropdownlits không chọn gì (MenuID=0), khi đó ta se insert 1 menu cha
if (int.Parse(DropDownList1.SelectedValue.ToString()) == 0)
{
int MenuID = MaxMenuID() + 1;
ac.ExeCuteNonquery(“insert into tbl_Menu(MenuID, MenuName, URL) values (” + MenuID + “, ‘” + TextBox1.Text + “‘, ‘” + TextBox2.Text + “‘)”);
WriteSiteMap();
}
else // Insert 1 menu con
{
int MenuID = MaxMenuID() + 1;
ac.ExeCuteNonquery(“insert into tbl_Menu values (” + MenuID + “, ‘” + TextBox1.Text + “‘, ‘” + TextBox2.Text + “‘,”+int.Parse(DropDownList1.SelectedValue.ToString())+” )”);
WriteSiteMap();
}
Response.Redirect(“~\\Default.aspx”); // Chuyển về trang default xem kết quả
// Ok, test thử …
}  định dạng lại tí cho đẹp
vào mục MasterPage.master phần thiết kế
– Nhấn Parent Node chọn -> AutoFormat –> Classic –>OK

asp_TinTuc 4
Hướng dẫn tạo trang thêm tin tức và hiển thị tin tức

– Làm nốt phần xóa menu
trong mục Admin/QuanliMenu.aspx.cs Nhấn đúp chuột vào nút xóa cho ta viết thêm code

protected void Button2_Click(object sender, EventArgs e)
{
ac.ExeCuteNonquery("delete from tbl_Menu where MenuID="+int.Parse(TextBox3.Text)+"");
WriteSiteMap();
Response.Redirect("~\\Default.aspx"); //Chuyển về trang default xem kết quả

Phần thêm bài viết

– Vào thư mục Admin –> Add new Item –>Tạo Web FromThemBaiViet.aspx –> OK (các thứ khác để mặc định vậy)
– Nhấn Design. Phần TextBox2 –> Properties –>TextMode chọn MultiLine
Mục (ID) sửa thành txtTomTat
– Ở TextBox1 sửa (ID) thành txtTieuDe
– Nội dung thì dùng 1 editor có sắn đó là FCK Editor
Copy 2 thư mục fckeditoruserfile vào thư mục gốc tin tức của ta
– Tiếp theo là add file dll vào toolbox (file FredCK.FCKeditorV2.dll) Bằng cách vào toolbox kích phải chuột chọn choose item … rồi browse đến file dll đó
Và bây giờ thì có thể kéo nó vào như các control bình thường thôi. Nó sẽ tự nhảy vào thư mục bin
Sửa Height cho nó giá trị 400px
– Tiếp theo là sửa lại trong Web.config
Copy code này trong file aspSetting (kèm theo):

<!--Thay đổi code ở đây-->
<appSettings>
<add key="FCKeditor:BasePath" value="~/fckeditor/"/>
<add key="FCKeditor:UserFilesPath" value="~/userfiles/"/>
</appSettings> 

dán nó vào web.config phần có dòng

<appSettings/>

Sửa Width cho nó giá trị 600px
OK, giờ bạn có thể soạn thảo như trong Word, khi lưu vào CSDL sẽ lưu ở dạng html
– Tạo Text box tên (ID) txtPath
– Tạo 1 label với tên (ID) lbThongBaoKQ
– Nhấn đúp chuột vào nút Tải lên để viết code cho nó
Tạo 1 folder mới với tên là HinhAnh
FileUpload1.HasFile == false tức là không có file được chọn
file.ContentLength>500000 tức dung lượng file lớn hơn 500 kb (khoảng đó) thì thông báo lỗi

protected void Button1_Click(object sender, EventArgs e)
{
HttpPostedFile file = FileUpload1.PostedFile;
if (FileUpload1.HasFile == false || file.ContentLength > 500000)
{
lbThongBaoKQ.Text = "Vui lòng chọn File < 500 kb";
}
else // Nếu file thỏa mãn
{
try
{
string strPath=Server.MapPath("~/HinhAnh/"+FileUpload1.FileName);
FileUpload1.SaveAs(strPath);
txtPath.Text="~/HinhAnh/" + FileUpload1.FileName.ToString();
lbThongBaoKQ.Text="Upload thành công";
}
catch
{
lbThongBaoKQ.Text="Upload thất bại";
}

– Nháy vào Label xóa tên text đi để trắng

* Vào Phần QuanLiMenu phần Design của nó copy DropDownList1 (phần chọn Menu cha)
dán nó vào phần Design của ThemBaiViet
Copy cả SqlDataSource – SqlDataSource1 vào phần Design của ThemBaiViet nữa

– Chúng ta sẽ viết 1 store procedure để thêm bài viết nữa
Vào tbl_BaiViet nháy chuột phải chọn Open Table Definition Mục đích là xem lại thông số để viết code cho chính xác thôi
Save được nghĩa là câu lệnh của ta đúng, nếu bạn đánh sai nó sẽ không Save được
– Nháy đúp vào nút Thêm bài viết để viết code cho nó
– Viết thêm

using System.Data.SqlClient;

Chúng ta sẽ viết 1 lớp bài viết để thao tác cho nó chuyen nghiệp hơn
– Vào mục App_Code nhấn chuột phải chọn Add New Item … chọn class đặt tên là BaiViet.cs –> Add Rồi ta viết code cho nó luôn

using System.Data.SqlClient;
public class BaiViet
{
// Khai báo các thuộc tính
public int MaBaiViet { get; set; } //Sửa lại ở đây
public string TieuDe { get; set; }
public string TomTat { get; set; }
public string NoiDung { get; set; }
public string HinhAnh { get; set; }
public string NgayTao { get; set; }
public string NguoiTao { get; set; }
public int MenuID { get; set; }

AccessData ac = new AccessData();
//Các phương thức
public void Insert(BaiViet bv)
{
SqlConnection con = ac.GetConnect();
con.Open();
SqlCommand cmd = new SqlCommand(“ThemBaiViet”, con);
cmd.CommandType = System.Data.CommandType.StoredProcedure; //Thêm lại ở đây
cmd.Parameters.Add(“@MaBaiViet”, System.Data.SqlDbType.BigInt).Value = bv.MaBaiViet;
cmd.Parameters.Add(“@TieuDe”, System.Data.SqlDbType.NVarChar).Value = bv.TieuDe;
cmd.Parameters.Add(“@TomTat”, System.Data.SqlDbType.NText).Value = bv.TomTat;
cmd.Parameters.Add(“@NoiDung”, System.Data.SqlDbType.NText).Value = bv.NoiDung;
cmd.Parameters.Add(“@HinhAnh”, System.Data.SqlDbType.NVarChar).Value = bv.HinhAnh;
cmd.Parameters.Add(“@NgayTao”, System.Data.SqlDbType.NVarChar).Value = bv.NgayTao;
cmd.Parameters.Add(“@NguoiTao”, System.Data.SqlDbType.NVarChar).Value = bv.NguoiTao;
cmd.Parameters.Add(“@MenuID”, System.Data.SqlDbType.TinyInt).Value = bv.MenuID; //Sửa lại ở đây

cmd.ExecuteNonQuery();
cmd.Dispose();
con.Close();
}
}

Vào Admin/QuanLiMenu copy đoạn code

public int MaxMenuID()
{...} 

dán vào Admin/ThemBaiViet SỬA LẠI 1 CHÚT THÀNH MaxMaBaiViet ….

AccessData ac = new AccessData();
public int MaxMaBaiViet()
{
int kq = 0;
string sql = "Select Max(MaBaiViet) from tbl_BaiViet";
try
{
kq = int.Parse(ac.ExecuteScalar(sql));
}
catch
{
kq = 0;
}
return kq;
}

BaiViet bv = new BaiViet();
protected void Button2_Click(object sender, EventArgs e)
{
bv.MaBaiViet = MaxMaBaiViet() + 1;
bv.TieuDe = txtTieuDe.Text;
bv.TomTat = txtTomTat.Text;
bv.NoiDung = FCKeditor1.Value;
bv.HinhAnh = txtPath.Text;
bv.NgayTao = DateTime.Now.ToShortDateString();
bv.NguoiTao = “abc”;
bv.MenuID = int.Parse(DropDownList1.SelectedValue.ToString());
}

* Vì chưa tạo Form đăng nhập nên sẽ không có session để lấy tên người tạo chúng ta cứ dùng tạm abc
– Tạo thêm 1 Label sau nút Thêm bài viết rồi viết thêm vào code trên tiếp (ĐÂY LÀ SỦA LẠI)

int mbv = MaxMaBaiViet() + 1;
try
{
bv.MaBaiViet = mbv ;
bv.TieuDe = txtTieuDe.Text;
bv.TomTat = txtTomTat.Text;
bv.NoiDung = FCKeditor1.Value;
bv.HinhAnh = txtPath.Text;
bv.NgayTao = DateTime.Now.ToShortDateString();
bv.NguoiTao = "abc";
bv.MenuID = int.Parse(DropDownList1.SelectedValue.ToString());

bv.Insert(bv);
}
catch (SqlException ex)
{
Label1.Text = ex.Message.ToString();
}

Phần Design của Admin/ThemBaiViet Nhấn Source để sửa code thêm

validateRequest="false"

vào dòng đầu tiên

<%@ Page Language="C#" AutoEventWireup="true" validateRequest="false" CodeFile="ThemBaiViet.aspx.cs" Inherits="Admin_ThemBaiViet" %> 

ok. phù… chúng ta chạy thử ! ^^

asp_TinTuc 5

Hướng dẫn làm trang hiển thị tin tức
– Vào tin tức tạo 1 Web Form mới đặt tên BaiViet.aspx Tích vào 2 lựa chọn (chọn cả) –> Add –> OK
– Nhấn Design vào toolbox chọn GridView1 đặt Width cho nó là 100%
Chọn 1 SqlDataSource –> Configure Data Source –> Chọn TinTucConnectionString –> Tích chọn MaBaiViet, TieuDe, TomTat, HinhAnh, NgayTao –> Finish
– Ở SiteMapDataSource – Menu mục Choose Data Source chọn SqlDataSource1. Nhấn Edit Columns –> Mục Selcted fields ta xóa hết chúng đi. Ở mục Available field nhấn chọn TemplateField –> OK
Chọn tiếp Edit Templates

* Mở Website của dân trí .com.vn ta làm tin tức dựa theo dạng như vậy
– Vào Toolbox chọn Image vào đặt thuộc tính cho nó Width là 70px, Height là 70px
– Tiêu đề là 1 cái link. Vào Toolbox lấy 1 HyperLink –> Nhấn Edit DataBingdings –> Nhấn Text –> Mục Bound chọn TieuDe
Nhấn NavigateUrl (Là cái trang mà ta sẽ nhảy tới khi Click vào) –> Mục Bound to: chọn MaBaiViet –> Tích chọn mục Custom bingding –> Viết thêm code ở trong là

Eval("MaBaiViet","noidung.aspx?mbv={0}")
--> OK
 Ta sẽ nhảy tới trang noidung.aspx với mã bài viết được truyền ở querystring {0} đại diện cho 1 số (mã nào đó) ứng với mabaiviet
 * Tiếp theo là tóm tắt
 - Vào toolbox lấy label --> Nhấn Text --> Mục Bound to chọn TomTat -->OK
 - Vào GridView1 chon lại Edit ... đặt lại thuộc tinh ShowHeader cho nó là False

 Các bài viết trong đây sẽ được load tùy theo menu tương ứng, vì vậy chúng ta phải truyền Mã tương ứng cho nó
 - Nhấp chuột vào SqlDataSource --> chọn ConfigureData Source --> Tích lại các cái như cũ là: MaBaiViet, TieuDe, TomTat, HinhAnh, NgayTao --> Nhấn WHERE --> mục columID chọn MenuID, Mục Operator chọn =, Mục Source chọn QueryString, Mục QueryString field chọn mid --> Add --> Next --> Finish

 * Phần Design của BaiViet.aspx nhấn GridView1 chọn Edit ItemTemplace --> Nhấn vào phần Ảnh chọn Edit DataBingdings... Nhấn ImageUrl mục Bound to: chọn HinhAnh --> OK

 ---------------------
 Làm trang hiển thị nội dung
 Vào mục gốc chọn Add new item mới là Web Form với tên Noidung.aspx chọn cả 2 tích --> Add --> vào Design của nó
 - Lấy 1 DataList ở toolbox --> Chọn thuộc tính cho nó với Width là 100%
 - Lấy 1 SqlDataSource --> chọn Cofigure Data Source .. --> Mục tbl_BaiViet tích chon TieuDe, Noi Dung --> Where --> Column chọn MaBaiViet , Mục Source chọn QueryString, Mục QueryString field gõ mbv --> Add --> OK --> Next --> Finish
 (Của mình làm khác: Column chọn MaBaiViet , Mục Source chọn QueryString, Mục QueryString field gõ mid --> Add --> OK --> Next --> Finish ==>Vậy mới hiện được nội dung của bài viết lên Web)
 - Nhấn DataList chọn Data Source là SqlDataSource1 --> Edit Template --> Xóa bên trong Vào toolbox đưa Label vào -->Edit Data bindings.. --> Nhấn Text --> Boundto: TieuDe --> OK
 Vào toolbox Lấy thêm Literal --> Edit Data bindings.. --> Nhấn Text --> Boundto: Noidung --> OK
 - Nhấp vào DataList chọn End Templeyte Editing -->chạy thử
 - Mục Label chọn thuộc tính cho nó Font Chữ đậm, cỡ chữ X-large, mầu xanh




 
Leave a comment

Posted by on July 29, 2011 in Software

 

copy dữ liệu khi Remote Desktop

Trước tiên vào Start  => All Programs => Accessories. ^^

 
Leave a comment

Posted by on July 28, 2011 in IT ABC

 

Thiết Kế Quy Trình Thanh Toán Hay Nhất

Mua sắm trực tuyến có thể là một việc lý tưởng. Bạn không cần phải ra khỏi nhà và bạn có thể nhanh chóng so sánh và đọc tất cả các thông tin cạnh tranh của các sản phẩm để chọn cho mình một sản phẩm tốt nhất. Nhưng, nó cũng có một chút trở ngại nếu quá trình này không được thiết kế chính xác.

Hãy cân nhắc về các đường link thanh toán, điền các form đăng ký và sau đó, thông tin về sản phẩm không có nguồn cung cấp, sẽ không được thực hiện trong ngày của bạn. Hãy dành một chút thời gian để điểu chỉnh lại quy trình thanh toán của bạn một cách chính xác hoàn thành nhanh cho kinh nghiệm người sử dụng (user expe­ri­ence) và bạn sẽ nhận được phần thưởng là khách hàng vui hơn và doanh thu tốt hơn. Dưới đây là 12 mẹo nhỏ hữu ích giúp bạn thực hiện những điều đó.

1. Đừng yêu cầu đăng ký thông tin để mua sắm

Khách hàng của bạn đang ở đây để mua sắm, chứ không phải để điền vào các mẫu đơn. Hãy chắc chắn rằng việc đăng ký được thực hiện trong suốt quá trình thanh toán và không thực hiện trước — và chắc chắn không phải trước khi truy cập vào các vị trí chuyển hàng hóa vào giỏ mua sắm của họ. Những form đăng ký là các rào cản, vì họ mất công sức và thời gian để đăng ký.

Target in 12 Tips For Designing an Excellent Checkout Process
Tar­get yêu cầu một tài khoản, nhưng chỉ nhắc nhở sau khi bạn đã sẵn sàng để thanh toán.

Bằng cách di chuyển những rào cản này xa hơn xuống một bậc, bạn đã tăng cơ hội cho khách truy cập của bạn trở thành khách hàng trả tiền. Điều này là bởi vì họ đã dành thời gian mua sắm vì lẽ đó bây giờ họ giường như không dừng lại và bỏ phí những thủ tục sơ khai này. Tuy nhiên, nếu rào cản này được đặt đúng chỗ ngay từ khi bắt đầu, họ có thể đi xa. Hãy suy nghĩ về nó như việc giữ cửa cho của hàng của bạn luôn mở để đón khách vào.

2. Thông báo cho khách hàng nếu mặt hàng có sẵn

Hãy rõ ràng về những mặt hàng sẵn có và thông báo cho khách hàng của bạn về số lượng trong kho. Nếu như một mặt hàng không có sẵn, thì đừng nên đưa khách hàng tiềm năng của bạn tốn thêm nhiều bước chỉ để họ khám phá ra rằng họ không thể mua nó ngay lập tức. Không chỉ hiển thị các mặt hàng sẵn có trên các trang về sản phẩm, mà hiển thị chúng ngay trên trang kết quả tìm kiếm.

Overclockers in 12 Tips For Designing an Excellent Checkout Process
Over­clock­ers cung cấp chính xác những thông tin chi tiết từ những trang danh sách sản phẩm.

Ngoài ra, nếu một mặt hàng hiện không có trong kho lúc này, nhưng sẽ có một vài ngày sau, thì đưa ra một lựa chọn trước để như vậy khách hàng sẽ không phải lo lắng về việc nhận nó ngay lập tức nhưng vẫn có thể có thể mua hàng.

3.Cho phép khách hàng của bạn để dễ dàng thay đổi đơn hàng

Mọi người đều mắc lỗi. Người thì đặt hàng hoá sai vào giỏ hàng của mình hoặc thay đổi lại ý định của mình. Vậy nên hãy chắc chắn rằng bạn không phản đối khách hàng tiềm năng của bạn trong quá trình thanh toán bằng cách làm những điều dễ dàng để sửa đổi.

Icondock in 12 Tips For Designing an Excellent Checkout Process
Icon­Dock chắc chắn để cung cấp những cách điều khiển đơn giản để thay đổi số lượng của một mặt hàng hay trả nó về lại.

Nếu ai đó muốn trả một mặt hàng hay các món đồ khỏi giỏ hàng của họ, thì đừng buộc họ phải nhập số tiền bằng không, thay vào đó, cung cấp một liên kết “trả lại” chính nó sẽ xóa sản phẩm đó từ giỏ hàng và đảm bảo đơn hàng sửa đổi nhanh chóng và dễ dàng.

4. Cung cấp cho người dùng với sự hỗ trợ, thời gian thực

Khi quy trình thanh toán yêu cầu dữ liệu của người sử dụng, thì rất khả năng rằng nhiều người sử dụng có thể gặp vấn đề — điều này gây ra bởi bất kỳ sự hiểu lầm hoặc một số nhu cầu riêng biệt, hay những quan tâm mà không thể dễ dàng xác định bằng cách sử dụng giao diện web đang hoạt động. Trong những tình huống này có thể là rất quan trọng để cung cấp cho người dùng với sự hỗ trợ riêng và chuyên nghiệp, thay vì gửi cho họ một đống trợ giúp hoặc các trang FAQ mà có thể không giải quyết được vấn đề vấn đề của người dùng. Và, tất nhiên, nếu người dùng không nhận được sự giúp đỡ mà họ cần và có nghi ngờ về toàn bộ điều, rất có thể họ sẽ hủy bỏ quá trình thanh toán.

Dell in 12 Tips For Designing an Excellent Checkout Process
The Dell Store cung cấp cho người sử dụng với sự hỗ trợ bằng điện thoại và nói chuyện trực tiếp bằng Chat. Nếu người dùng gặp phải vấn đề trong quá trình thanh toán, thì họ có thể yêu cầu ngay lập tức sự phục vụ và sẽ nhận được sự hỗ trợ chỉ trong vài phút. Chính người sử dụng đó sẽ thân thiện, hữu ích và có thể làm tăng tỉ lệ thay đổi của bạn.

Vì vậy đó là một ý tưởng tốt để thêm một-chat hoặc điện thoại hỗ trợ cho quá trình thanh toán. Không phải mọi công ty có thể đủ khả năng đó, nhưng các công ty trung và lớn hơn có thể muốn xem xét sự chọn lựa này, đặc biệt nếu quá trình thanh toán thì càng liên quan nhiều hơn nữa.

5. Giữ nút ‘Back’ đầy đủ chức năng

Nút quay lại là một trong những nút được sử dụng nhất trong một trình duyệt web, do đó bạn có thể chắc chắn một số người sẽ sử dụng nó trong quá trình thanh toán trên trang web của bạn. Một số trang web vô hiệu hóa các chức năng của nút ‘Back’ thông qua tự động chuyển hướng hoặc các thông báo lỗi, điều này chắc chắn sẽ ảnh hưởng tiêu cực đến khách hàng.

Ticketmaster in 12 Tips For Designing an Excellent Checkout Process
Tick­et­mas­ter sẽ từ chối khi bạn cố gắng để quay trở lại.

Không chỉ nút dẫn trở lại (Back) trang trước không nên gặp phải bất kỳ lỗi nào, bạn cũng nên lưu dữ liệu của người dùng để nó được hiển thị lại nếu đó là mẫu điền thông tin. Điều này cho phép người sử dụng có những điều chỉnh và thực hiện ngày mà không cần phải điền lại toàn bộ mẫu thông tin. Cũng có đôi lúc nó quá trễ để quay lại, giống như sau khi mình đã nhấp vào nút cuối cùng là “Hoàn thành đơn hàng “, nhưng phải bảo đảm rằng tất cả các trang khác vẫn xoay xở được với nút Back, bạn có thể cung cấp một kinh nghiệm người dùng tốt hơn cho khách hàng của bạn bằng cách tiết kiệm cho họ thời gian và thất vọng.

6. Cung cấp hình ảnh, thông số kỹ thuật và liên kết cho các danh mục trong giỏ hàng.

Khách hàng của bạn sẽ cần phải xem xét trong giỏ hàng của họ trước khi bấm vào nút cuối cùng sẽ hoàn thành đơn hàng của họ để đảm bảo họ đã thực sự có những gì khi họ vào đây.
Danh mục tiêu đề riêng lẻ không phải là cách tốt nhất giúp khách hàng của bạn nhanh chóng quét qua giỏ, vì vậy hãy chắc chắn để thêm hình ảnh và chi tiết kỹ thuật sản phẩm

— ví dụ: kích thước, màu sắc, bìa cứng hoặc bìa mềm.

Amazon Items in 12 Tips For Designing an Excellent Checkout Process
Ama­zon chỉ rõ màu sắc và chi tiết, e.g. bìa cứng/ bìa mềm, liên kết trở lại sản phẩm nhưng không thành trong việc cung cấp hình ảnh thu nhỏ. (Muốn tham khảo thì click vào link gạch dưới!!!)

Oxfam in 12 Tips For Designing an Excellent Checkout Process
Oxfam cho thấy hình ảnh thu nhỏ của mỗi sản phẩm để dễ dàng lướt qua.

Ngoài ra, bạn nên liên kết các mặt hàng này vào các trang sản phẩm của họ chỉ trong trường hợp khách hàng muốn để xác minh rằng nó thực sự là danh mục đúng.

7. Cung cấp thêm chỉ dẫn cho từng quá trình

Thanh toán thường là một quá trình nhiều bước. Điều này có nghĩa khách hàng sẽ phải đánh dấu nhiều trang trước khi đơn hàng được hoàn tất. Để làm cho quá trình này có thể sử dụng chắc chắn thì thêm vào đó một chỉ dẫn cho quá trình, nó có thể nói chính xác vào những giai đoạn của quá trình thanh toán thì khách hàng nên hay trong bao lâu để đi tiếp– tức là danh sách tất cả các bước.

Apple Progress in 12 Tips For Designing an Excellent Checkout Process
Apple trình bày một chỉ dẫn rất phù hợp trên các trang thanh toán của họ.

Biết được nơi bạn đang ở trong địa hình của những trang của quá trình sẽ cung cấp cho người dùng của bạnmột cảm giác kiểm soát, đó là quan trọng từ góc độ khả năng sử dụng. Ngoài ra, giai đoạn được biết cái gì chưa đến sẽ loại bỏ bất kỳ sự nhầm lẫn — tức là họ sẽ biết khi nào họ nhận được đến bước cuối cùng. Điều này sẽ làm cho nó dễ dàng hơn thông qua việc bấm vào để khi bạn biết bạn vẫn có thể sửa đổi hoặc hủy bỏ lệnh ở bất kỳ giai đoạn trước đó.

8. Giữ cho giao diện thanh toán đơn giản

Quá trình thanh toán khác với phần còn lại của những kinh nghiệm duyệt web trên trang web của bạn. Trong quá trình này khách hàng của bạn không được mua sắm — họ đang làm cho việc mua. Điều này có nghĩa tất cả các điều khiển trình duyệt đang dư thừa ở đây và sẽ chỉ phân tâm khách hàng của mình từ nhiệm vụ chính. Loại bỏ những yếu tố không cần thiết – v.d. các đường Link đầu vào sản phẩm, các sản phẩm hàng đầu cung cấp mới nhất và như vậy — để giữ cho giao diện đơn giản.

Dell in 12 Tips For Designing an Excellent Checkout Process
Các trang thanh toán của Dell làm mất thanh nav­i­ga­tion sản phẩm và chỉ tập trung vào quá trình thanh toán.

Cung cấp một liên kết “Trở lại mua sắm” trong trường hợp khách hàng muốn quay lại và mua thêm để một cái gì khác. Ngoài ra, đảm bảo tất cả các nút trỏ đến các bước tiếp theo trong quá trình lớn và nổi bật như vậy họ không bỏ qua

9.Đừng đặt người dùng ra ngoài quá trình thanh toán

Đó là điều cần thiết mà quá trình thanh toán không bị phá vỡ, ví dụ, đưa khách hàng đến một trang khác. Đưa người sử dụng ra khỏi quá trình này có thể gây ra hai vấn đề: 1) họ có thể bị lẫn lộn về nơi họ vào và thậm chí bị mất những trang thanh toán bằng cách đóng tab hoặc cửa sổ. 2) họ có thể bị phân tâm và không hoàn tất quá trình.

Laskys in 12 Tips For Designing an Excellent Checkout Process
Laskys trình bày những mách nhỏ giúp đỡ khi đang băn khoăn về các yếu tố nhất định để làm rõ chức năng của nó.

Để khắc phục tình trạng này, chúng tôi thực sự cần phải tìm một cách để hiển thị tất cả các thông tin cần thiết trên các trang thanh toán. Nếu bạn cần phải cung cấp một số trợ giúp hoặc thông tin không phù hợp trên trang hiện tại, sử dụng các cửa sổ đang trôi nổi, hay như là một phương sách cuối cùng, một cửa sổ pop-up để hiển thị này. Điều này cho phép bạn trình bày chất liệu mới cho người dùng mà không cần đưa họ ra quá trình thanh toán.

10. Thông báo cho người sử dụng về thời gian giao hàng

Mua sắm trực tuyến có một bất lợi lớn để mua sắm trong tiêu chuẩn của bạn ‘gạch và vữa’ .cửa hàng: bạn phải đợi để có được công cụ của bạn. Đến địa chỉ này chắc chắn để nói với khách hàng của bạn khi họ có thể mong đợi để nhận được sản phẩm của họ.

Apple Ajax in 12 Tips For Designing an Excellent Checkout Process
The AppleStore điều chỉnh cách vận chuyển với AJAX khi bạn đặt hàng.

Đây là điều cần thiết cho một vài lý do. Thứ nhất, khách hàng của bạn có thể cần phải chắc chắn có ai đó ở nhà để nhận được việc phân phối; và thứ hai, bạn sẽ một kỳ vọng nên họ sẽ không cần phải đoán. Hãy chắc chắn rằng những ngày này được thể hiện càng sớm càng tốt, tốt hơn trên các trang sản phẩm của mình, để các khách hàng tiềm năng của bạn có thể đánh giá hay không mà họ sẽ nhận được nhanh chóng mục đủ cho nhu cầu của họ.

11. Nói cho khách hàng những gì xảy ra tiếp theo

Được rồi, khách hàng của bạn đã hoàn thành đơn hàng và nhấp vào nút cuối cùng — vì vậy những gì xảy ra tiếp theo? Hoàn thành trình tự với một câu lưu ý “Cảm ơn bạn”. Điều này rất lịch sự và khách hàng của bạn chắc chắn sẽ đánh giá cao.

Amazon Thankyou in 12 Tips For Designing an Excellent Checkout Process
Ama­zon cám ơn bạn đã đặt hàng và thông báo cho bạn về các hoạt động tiếp theo.

Ngoài ra, hãy chắc chắn để nói với khách hàng của bạn những gì sẽ xảy ra tiếp theo — tức là một tin nhắn thông báo cho họ rằng họ sẽ nhận được một email xác nhận khi hàng hóa được vận chuyển. Điều này sẽ làm sáng tỏ bất kỳ sự không chắc chắn về đơn đặt hàng của họ và thiết lập một kỳ vọng chính đáng.

12. Gửi một email xác nhận

khách hàng của bạn có thể đã tìm ra và đặt thứ đơn hàng của họ, nhưng quá trình này chưa hoàn thành. Gửi một email xác nhận với các chi tiết về đơn hàng của họ và dự toán giao hàng. Các chi tiết đơn hàng sẽ rất hữu ích vì chúng sẽ cho phép khách hàng của bạn để xác minh rằng họ đã ra đặt đúng những món hàng này.

Amazon Email in 12 Tips For Designing an Excellent Checkout Process
Ama­zon sẽ gửi bạn một email sau khi bạn đã thanh toán để xác nhận các chi tiết và cũng để giải thích cách bạn có thể sửa đổi nó trước khi nó được vận chuyển.

Nếu có sai lầm, họ sẽ có thể đăng nhập lại và sửa đổi đơn hàng trước khi nó được chuyển đi. những sai lầm đơn giản như chọn kích thước sai hoặc màu sắc sẽ xảy ra, do đó, hãy làm cho kinh nghiệm mua sắm dễ dàng và hỗ trợ cho khách hàng của bạn.

Sau đây là một số trang thanh toán:

Shopcomposition in 12 Tips For Designing an Excellent Checkout Process
Shop­com­po­si­tion uses an ele­gant and min­i­mal­ist check­out design.

Inkd in 12 Tips For Designing an Excellent Checkout Process
Inkd’s check­out pages are clean and simple.

Atebits in 12 Tips For Designing an Excellent Checkout Process
Trang thanh toán của Atebits được thiết kế rất đẹp


Threadless in 12 Tips For Designing an Excellent Checkout Process
Thread­less makes every­thing clear by pro­vid­ing plenty of information.

Swarovski in 12 Tips For Designing an Excellent Checkout Process
Swarovski clearly shows what stage of the process you’re at with a large progress bar at the top.

Openmoko Cart in 12 Tips For Designing an Excellent Checkout Process
Openmoko’s sim­ple 2 page checkout.

Madebysofa in 12 Tips For Designing an Excellent Checkout Process
Sofa’s one page checkout.

Panic in 12 Tips For Designing an Excellent Checkout Process
Panic’s beau­ti­ful sin­gle page check­out page for their Coda editor.

Kết luận …

Xây dựng một sản phẩm thanh toán tốt có một số vấn đề. Đó là về loại bỏ phiền nhiễu để giúp người dùng tập trung vào nhiệm vụ chính. Đó là về cung cấp tất cả các thông tin cần thiết và giúp đỡ để khách hàng hiểu được tất cả các giai đoạn của quá trình. Quan trọng nhất, làm cho nó dễ dàng, bởi vì sau tất cả, quá trình thanh toán nhanh hơn, khách hàng của bạn sẽ cảm thấy hạnh phúc hơn. Và bạn cũng vui vẻ hoàn thành công việc của mình.

Theo SmashingMagazine

 
Leave a comment

Posted by on July 28, 2011 in IT ABC

 

Biến điện thoại Android thành modem để kết nối Internet trên PC

Không phải lúc nào cũng sẵn có kết nối Internet hoặc Wifi với người sử dụng máy tính. Tuy nhiên, nếu bạn đang sử dụng điện thoại Android, bài viết dưới đây sẽ cung cấp giải pháp để truy cập Internet trên máy tính.

Những công nghệ kết nối Internet không dây, như Wifi hay 3G hiện đang trở thành phổ biến. Người dùng máy tính, đặc biệt là laptop hoặc netbook có thể kết nối và truy cập Internet ở bất kỳ đâu có sóng wifi.

Tuy nhiên, không phải lúc nào cũng có sẵn Wifi, hoặc không phải ai cũng có đăng ký dịch vụ 3G để sử dụng Internet.

Android hiện đang là một trong những nền tảng di động phổ biến nhất trên toàn thế giới và riêng tại Việt Nam. Với PdaNet, máy tính của bạn có thể dễ dàng kết nối và truy cập Internet ở bất kỳ đâu, miễn là bạn đang sử dụng 1 chiếc smartphone hoạt động trên nền tảng Android.

PdaNet là ứng dụng cho phép biến điện thoại Android thành một modem để kết nối Internet. Điều đặc biệt là ứng dụng này không yêu cầu phải thiết lập quá phức tạp trên thiết bị, nên có thể sử dụng dễ dàng, đối với cả những ai không thành thạo về công nghệ.

Những thiết bị cần thiết:

Để biến smartphone thành một thiết bị modem, giúp máy tính kết nối Internet, bạn cần phải chuẩn bị đầy đủ những điều sau:

– Smartphone sử dụng Android.

– Laptop, netbook hoặc desktop mà bạn muốn sử dụng để kết nối Internet.

– Cáp USB để kết nối smartphone với máy tính.

– Phần mềm PdaNet phiên bản miễn phí dành cho Android.

– Phần mềm PdaNet miễn phí dành cho máy tính. Download tại đây (gồm phiên bản dành cho Windows 32-bit và 64-bit)

PdaNet dành cho Android mặc định có giá 15,95USD. Sau khi kết thúc thời gian sử dụng thử, bạn vẫn có thể tiếp tục sử dụng phần mềm, tuy nhiên không thể truy cập vào các trang web có giao thức https (giao thức bảo mật, thường sử dụng trên các dịch vụ email, các trang web thanh toán trực tuyến…). Trong trường hợp chỉ sử dụng phần mềm để lướt web thông thường, bạn vẫn hoàn toàn có thể sử dụng PdaNet mà không gặp bất kỳ trở ngại nào.

Hướng dẫn cài đặt PdaNet trên thiết bị Android:

Trong trường hợp bạn không thể truy cập từ đường link đã cung cấp ở trên thì có thể thực hiện theo các bước sau để cài đặt PdaNet trên thiết bị của mình:

Đầu tiên, truy cập vào Android Market, tiến hành tìm kiếm theo từ khóa “PdaNet”. Từ kết quả tìm kiếm được, nhấn ứng dụng được thiết kế với June Fabrics Technology Inc. Nhấn nút Install và tiến hành cài đặt như hình minh họa bên dưới.

Sau khi hoàn tất quá trình cài đặt, kích hoạt ứng dụng trên Android. Từ giao diện hiện ra, nhấn vào nút “Enable USB Tether” để kích hoạt tính năng kết nối trên Android.

Thay vì kết nối với máy tính thông qua USB, người dùng có thể kích hoạt tính năng kết nối qua Bluetooth (bằng cách nhấn vào tùy chọn “Enable Bluetooth DUN”, tuy nhiên kết nối này sẽ ảnh hưởng đến thời lượng sử dụng pin trên smartphone lẫn laptop nên sẽ không được giới thiệu tại đây.

Trong lần đầu tiên sử dụng ứng dụng trên Android, phần mềm sẽ yêu cầu người dùng download phiên bản phần mềm dành cho máy tính (trong trường hợp máy tính chưa từng được cài đặt cũng như hiện không có kết nối Internet để download).

Nhấn “Yes, let me download” để download file cài đặt và smartphone, sau đó sử dụng máy tính truy cập vào thẻ nhớ của điện thoại để lấy file download được và cài đặt. Ngược lại, nhấn “No, already installed” nếu đã cài đặt phần mềm từ trước đây.

Hướng dẫn cài đặt PdaNet trên máy tính:

Bạn có thể download phần mềm PdaNet dành cho máy tính (miễn phí) theo đường link đã cung cấp ở đầu bài, hoặc download thông qua Android như đã đề cập ở trên.

Tiến hành cài đặt như phần mềm bình thường.

Trong quá trình cài đặt, bạn cần phải kết nối smartphone với máy tính thông qua cáp USB. Phần mềm sẽ yêu cầu người dùng xác nhận hãng sản xuất của smartphone mà mình đang sử dụng.

Lưu ý: trong trường hợp hãng sản xuất không xuất hiện ở danh sách liệt kê, bạn chọn Others.

Sau khi hoàn tất cài đặt, biểu tượng của phần mềm sẽ xuất hiện trên khay hệ thống.

Bây giờ, mỗi khi kết nối smartphone với máy tính, với ứng dụng PdaNet đã được kích hoạt trên smartphone (và tùy chọn “Enable USB tether” đã được chọn), máy tính của bạn có thể kết nối ngay Internet.

Trong trường hợp chưa thể kết nối Internet, bạn kích chuột phải lên biểu tượng PdaNet ở khay hệ thống của Windows, chọn Connect Internet để tiến hành kết nối.

Như vậy, với sự giúp đỡ của PdaNet, máy tính của bạn có thể kết nối ở bất kỳ mọi nơi, cả ở những điểm không có Internet và những điểm không có sóng Wifi.

 
Leave a comment

Posted by on July 28, 2011 in IT ABC

 

Bí quyết duyệt Facebook không bị sếp dòm ngó

Không thể phủ nhận được rằng hiện nay có rất nhiều dân văn phòng thường xuyên vào đọc tin Facebook trong giờ làm việc, điều này khiến các sếp lớn của bạn không hài lòng chút nào. Và các bạn sẽ cần đến tuyệt chiêu dưới đây để thoát khỏi ánh mắt hình viên đạn của cấp trên.

Thủ thuật này sẽ nhanh chóng giúp bạn che giấu nội dung của toàn trang Facebook vào một bảng tính Excel quen thuộc với dân văn phòng. “Bảng tính” này sẽ cung cấp cho bạn đầy đủ tất cả nội dung hiện có trên trang chủ nhưng giao diện vẫn như một bảng tính Excel nên sếp bạn có tiện mắt ngó vào màn hình của bạn cũng không thể phát hiện ra điều gì

1_11273

Đầu tiên bạn cần truy cập vào địa chỉ http://hardlywork.in để bắt đầu xác nhận cho phép địa chỉ này nhận thông tin từ Facebook của bạn. Bạn chỉ việc bấm vào nút Gimme dem spreadsheets ở chính giữa là 1 cửa sổ yêu cầu cho phép ứng dụng của trang Hardlywork hoạt động trên Facebook của bạn.

image

Một cửa sổ trợ giúp hiện ra trong vài giây giúp bạn nắm bắt được vị trí của các nút tương ứng trong giao diện mới này.

Bấm full screen trình duyệt (F11)

image

Trông xa thì nó không khác gì một bảng tính thực sự.

Và bạn có thể bắt đầu đọc tin trên Facebook một cách thoải mái mà sếp của bạn từ xa ngó lên vẫn chỉ thấy một nhân viên đang chăm chỉ kiểm tra lại các số liệu trên một bảng tính Excel quen thuộc.

Nếu như sếp của bạn tỏ vẻ nghi ngờ và đang tiến lại gần, thì bạn đừng hoảng, trang web cung cấp cho bạn 1 nút thoát hiểm. Khi sếp tiến lại gần bạn chỉ cần nhấn nút cách 1 lần và giao diện với toàn bộ nội dung Facebook sẽ nhanh chóng được chuyển đổi thành một bảng đầy số và các hàng rối mắt làm nản lòng các sếp trên khi liếc qua máy bạn. Và khi họ đi bạn chỉ cần nhấn nút Spacebar 1 lần nữa để tiếp tục “công việc” thú vị của mình.

image

Chúc các bạn thành công !

Theo  @sokanh03 blog

 
Leave a comment

Posted by on July 28, 2011 in IT ABC