12/31/13

[SQL Server, Access] Lưu hình ảnh vào database

Trong bài viết này tôi sẽ hướng dẫn bạn cách chèn hình ảnh trực tiếp vào database. Cách này tuy làm cho database lớn/nặng nhưng nó cũng giải quyết rất nhiều vấn đề trong quá trình lập trình.
Ở đây, csdl tôi sử dụng là ms Access và MS SQLserver.
Cách 1: Database là Access

12/29/13

[Encrypt, Decrypt] Mã hóa và giải mã trong C#

Trong khi lập trình ứng dụng, ở các form đăng nhập, khi cần nhập mật khẩu, chúng ta thường phải truy xuất vào CSDL để lấy ra mật khẩu. Nhưng để bảo mật, mật khẩu này đã được mã hóa từ trước rồi. Để mã hóa được chuỗi mật khẩu, ta dùng hàm Encrypt sau:

public string Encrypt(string toEncrypt, bool useHashing)
{

12/28/13

[C#] Kiểm tra ký tự nhập vào TextBox C#

Sau đây mình chia sẻ 1 số ký tự trong C# được chuyển sang dạng số. Cái này dùng để kiểm tra chuỗi nhập vào , ví dụ mình đặt trong sự kiện KeyPress của texbox Mật khẩu. Nếu người dùng đang ở textbox Mật khẩu và nhấn phím Enter (13) thì sẽ thực hiện thủ tục đăng nhập. Ngoài ra nó còn kiểm tra các ký tự đặc biệt, để tránh tình trạng bị hack injection SQL.



A-Z (65-90)
a-z (97-122)
0-9 (48-57)
0-9 (96-105) - cái này là phím Numpad nhé.
các phím điều hướng lên trên, xuống , phải trái, home,pgup,gpdown,end (32-47)
space (phím cách) - 32
tab, enter, shift, ctrl, alt, capslock, dấu chấm, dấu phảy  (9,13,16,17,18,20, 188,190)

12/27/13

[Window Form] Cho phép show form 1 lần duy nhất

Như tiêu đề mình cũng nói, thường thường bạn dùng phương thức .show() của 1 form nào đó, khi bạn thực hiện nhiều lần phương thức này nó sẽ show() lên nhiều form, sau đây mình hướng dẫn các bạn show() form duy nhất 1 lần nếu nó đã đóng. Còn nếu form đó đang mở thì Active form đó lên , để tránh tình trạng mở nhiều form.

Các bạn viết đoạn code sau:


frmUsers là form User mình khởi tạo nó = biến fUsers. Trong sự kiện click của menu_user mình sẽ kiểm tra form đó User đã đóng hay chưa (fUsers.IsDisposed == true), nếu đóng thì thực hiện khởi tạo mới form đó, và chỉ cho form đó biết form Cha nó là form Admin. Tiếp theo là dùng phương thức .Show() để gọi form đó lên.

Ngược lại nếu form đó đã mở rồi khi người dùng click vào menu_user thì form đó sẽ show() lên thôi. Mình chuyển focus() về form đó.
fUsers.WindowsState = FormWindowState.Normal   -- nghĩa là khi form đó nó ẩn, trạng thái Minnimized đấy thì mình sẽ khôi phục về trạng thái bình thường khi mới show() form.

[Window Form] Kiểm tra một phím bất kỳ có được nhập trên Form

Các bạn viết đoạn code sau vào trong form muốn kiểm tra.       
Các bạn thay phím cần kiểm tra Keys.(phím cần kiểm tra) , ở đây mình kiểm tra phím Esc có được nhấn hay không.


[C#] Tạo chương trình dạng Single-instance - chỉ có một ứng dụng chạy trong task manager

Đôi lúc chúng ta cần ngăn cản ứng dụng khởi chạy nhiều lần để làm giảm phiền toái cho người dùng. Vậy có cách nào để làm được điều này hay không. Sau đây tôi hướng đẫn bạn cách đơn giản nhất mà tôi hay dùng. Tuy nhiên tôi chỉ hướng đẫn phần cơ bản còn vận dụng như thế nào thì tùy ở mỗi người.

-Có 1 số cách để giải quyết vấn đề này, hay gặp là sử dụng Mutex và Process. Tuy nhiên chúng chỉ kiểm tra xem 1 instance của chuơng trình có đang chạy hay ko và ko thể điều khiển được instance đó (như việc active cửa sổ chính chẳng hạn).

Cách 1:
Sử dụng class System.Diagnostics.Process. Sau đây là đoạn code minh họa.


Ở đây cần chú ý rằng. Cần phải kiểm tra Length >= 1 thì mới kết luận là ứng dụng đã khởi chạy rồi. Vì ứng dụng mình vừa chạy lên và ứng dụng cũ đang chạy là hai. Nếu có từ hai cái trở lên thì ứng dụng vừa chạy lên sẻ tắt process của nó đi. Vì vậy sẻ đảm bảo là một ứng dụng không có 2 Process chạy song song.
Cách này được tôi dùng phổ biến. Tuy nhiên phải tùy tùy biến lại chút ít cho trường hợp hai ứng dụng khác nhau nhưng được đặt trùng tên….


Cách 2  :
Bây giờ mình sẽ hướng dẫn sử dụng 1 cách khá mới tận dụng thư viện Visual Basic trong .Net. Trước khi gõ code bạn hãy add reference thư viện Microsoft.VisualBasic vào.
AddReference
Phải add thư viện này bạn mới có thể dùng using Microsoft.VisualBasic.ApplicationServices mà ta sẽ sử dụng trong bài được.
Sửa file Program.cs như sau:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Threading;
using Microsoft.VisualBasic.ApplicationServices;
namespace WindowsApplication1
{
static class Program
{
// Form chính cần gọi của chương trình phải đặt là static
static Form1 frm;
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
frm = new Form1();
SingleInstanceApplication.Run(frm, NewInstanceHandler);
}
public static void NewInstanceHandler(object sender,
StartupNextInstanceEventArgs e)
{
// Kích hoạt cửa sổ của instance đang chạy
// Bạn có thể thay thế bằng 1 hành động khác
frm.Activate();
}
/// <summary>
/// Lớp này dùng để gọi chạy form dạng single instance
/// </summary>
public class SingleInstanceApplication : WindowsFormsApplicationBase
{
private SingleInstanceApplication()
{
base.IsSingleInstance = true;
}
public static void Run(Form f,
StartupNextInstanceEventHandler startupHandler)
{
SingleInstanceApplication app = new SingleInstanceApplication();
app.MainForm = f;
app.StartupNextInstance += startupHandler;
app.Run(Environment.GetCommandLineArgs());
}
}
}
}
Như bạn có thể thấy
Trích dẫn:
app.Run(Environment.GetCommandLineArgs());
Bạn có thể dễ dàng điều khiển instance đã chạy của mình bằng cách thiết lập các hành động sẽ xử lý tùy thuộc vào các tham số sẽ truyền vào thông qua dòng lệnh. Khi đó bạn có thể khởi tạo form như sau:
Code:
frm=new Form1(args[0]);
và trong constructor của Form1 bạn sẽ viết code kiểm tra và xử lý, ví dụ args[0]==”/scan” thì thực hiện lệnh scan máy chẳng hạn.
Hi vọng bài viết này giúp đỡ giải quyết 1 số vấn đề mà các bạn gặp phải.