[Linq to Sql] Sửa dữ liệu


thuvienwinform - Sau bài 1: Load và thêm dữ liệu thì trong bài này mình sẽ giới thiệu code để sửa dữ liệu trong CSDL bằng LINQ to SQL. Các nguyên liệu như CSDL, form vẫn dùng ở bài trước. OK code khá đơn giản thui:

Tải Demo: bài 4


private void btSua_Click(object sender, EventArgs e)//Sửa
        {
            //Sửa
            //Xác định thanh viên cần sửa
            var thanhVien = (from tv in db.DSLs
                             where tv.HoTen == dgvNoiDung.CurrentRow.Cells["HoTen"].Value.ToString()//Chọn thành viên nào có tên giống tên nhập vào
                             select tv
                            ).SingleOrDefault();
            thanhVien.HoTen = txtHoTen.Text;
            db.SubmitChanges();
            Refresh();
        }

Giải thích:
SingleOrDefault(): chọn 1 đối tượng mà thôi
Ở đâu mình truy vấn thành viên có tên giống với tên trong txtHoTen sau đó tiến hành gán cho nó tên mới thông qua txtHoTen luôn
1/05/2014
Đăng bởi :
Nhãn : ,

[Linq to Sql] Load và Thêm dữ liệu


thuvienwinfom - Để thêm dữ liệu vào CSDL bằng Linq ta cần khai báo thư viện System.Linq (using System.Linq). Thường thì khi ta tạo project mới thì nó đã thêm sẵn dòng này cho ta rồi! OK bây giờ ta sẽ thực hiện việc thêm dữ liệu bằng Linq, 1 nốt nhạc là xong :v
Tải demo: Bài 4
Chuẩn bị: (vì mấy cái này cần cho mấy bài sau nên mọi người mới tập sử dụng Linq nên làm theo y hệt sẽ dễ hiểu hơn)
I. Tạo môi trường luyện tập
1. CSDL
+ Tên bảng: DSL (danh sách lớp)

+ Form mẫu. Các biến như trong hình

+ Add item LINQ to SQL cho form này:
B1: project -> add new item (CS + A)

B2: chọn LINQ to SQL và đặt tên cho nó là: LinqToSql -> ok

B3: Kéo bảng DSL đã tạo vào -> Ctrl + S

Tạo 1 biến db như sau:
LinqToSqlDataContext db = new LinqToSqlDataContext();
OK vậy là đã tạo được môi trường luyện tập...

II. Load dữ liệu từ CSDL ra datagridView bằng LINQ to SQL
Để tiện sử dụng lần sau ta tạo sẵn một thủ tục Refresh như sau:
private void Refresh()
        {
            dgvNoiDung.Rows.Clear();
            var list = from p in db.DSLs
                       where p.HoTen == p.HoTen//Chọn toàn bộ bảng
                       select p;
            dgvNoiDung.DataSource = list;
        }


Giải thích:
var list: khai báo 1 biến chưa có kiểu
form p in db.DSLs
where p.HoTen == p.HoTen
select p; :chọn toàn bộ bảng DSL

OK cho Refresh vào form load là xong viêc load dữ liệu:
private void Form1_Load(object sender, EventArgs e)
        {
            //dgvNoiDung.DataSource = db.DSLs;//Cách 1
            Refresh();//Cách 2
        }


III. Thêm dữ liệu vào CSDL
- Nếu ai đã từng sử dụng ADO.NET thì sẽ cảm thấy nó hơi ngược một chút. Trong ADO.NET thì chúng ta select -> frrom -> where còn trong LINQ to SQL thì from -> where -> select.
- Để thêm 1 họ tên vào bảng DSL ta code như sau:

private void btThem_Click(object sender, EventArgs e)//Sự kiện click btThem
        {
            //Thêm mới
            DSL thanhVien = new DSL();//Tạo 1 thành viên mới
            thanhVien.HoTen = txtHoTen.Text;//Gán giá trị HoTen của thanhvien
            db.DSLs.InsertOnSubmit(thanhVien);//Thêm thanhvien này vào csdl
            db.SubmitChanges();//Xác nhận thay đổi
            Refresh();//Làm mới lại datagridView
        }
Giải thích:
db.DSLs.InsertOnSubmit: thêm một thành viên vào bảng DSL
db.SubmitChanges: xác nhận thay đổi trong bảng. Nếu không có dòng này thì dữ liệu sẽ không được thêm vào CSDL

Bài 2 sẽ là sửa dữ liệu
1/04/2014
Đăng bởi :
Nhãn : ,

[Linq] Giới thiệu


thuvienwinform - Linq(Language Integrated Query - Ngôn ngữ tích hợp truy vấn) là thư viện mở rộng cho các ngôn ngữ lập trình C#, VB,...được Microsoft tích hợp vào .NET Framework (từ phiên bản 3.5).
Linq cho phép chúng ta làm việc với các tập dữ liệu như CSDL, XML, HTML,...qua đó người ra ta phân loại Linq như sau:

  • LINQ to Objects: làm việc với dữ liệu trên bộ nhớ (thường là các danh sách kế thừa interface IEnumerable) sử dụng cú pháp ngôn ngữ LINQ.
  • LINQ to XML: làm việc với dữ liệu XML sử dụng cú pháp ngôn ngữ LINQ.
  • LINQ to Entities: làm việc với Entity Framework.
  • LINQ to SQL: Làm việc với SQL Server.
  • LINQ to Datasets: Một kỹ thuật cho phép sử dụng LINQ trong một ứng dụng dựa trên DataSet mà không cần viết lại sử dụng LINQ to SQL.
  • PLINQ: Hỗ trợ sử dụng LINQ trong lập trình song song.




  • Tuy nhiên, trong các bài tiếp theo trong nhãn này mình chỉ nói đến LINQ to SQL!
    Như chúng ta đã biết để thao tác với CSDL cũng có thể dùng ADO.NET. Vậy chúng khác nhau như nào?
    - Đầu tiên Linq cho phép tạo câu truy vấn ngay trong ngôn ngữ lập trình. Với ADO.NET thì chúng ta phải viết câu truy vấn như một string vậy, điều đó rất khó kiểm lỗi (phải chạy thử mới biết được lỗi)
    - Khi thao tác với CSDL (Thêm, sửa, xóa,...) thì Linq đã tự tối ưu cho chúng ta để đảm bảo tốc độ cao nhất. Đơn cử như việc select, trong ADO.NET thì ta sử dụng "select *..." sau đó lọc ra những trường cần dùng, còn Linq thì chỉ select những trường cần chọn mà thôi nên nó sẽ tối ưu hơn. Hay nói cách khác thì Linq đã tối ưu sẵn cho ta rồi!
    - Về yêu cầu thì ADO.NET chỉ cần phiên bản .NET 2.0, còn Linq thì yêu cầu phiên bản 3.5
    Vậy Linq có phải được tạo ra để thay thế ADO.NET? Không phải, bạn có thể làm việc với Linq mà không dính đến CSDL. Linq to Sql là một phần mở rộng của Linq.

    Còn tiếp...

    Project Test có sẵn trong Visual Studio và cách sử dụng


    thuvienwinform - Test (kiểm lỗi) chương trình trước khi đưa nó ra sử dụng là một công việc hết sức quan trọng! Thường thì ta test bằng tay, như vậy khá là chậm và đôi khi chúng ta quyên mất thao tác gây ra lỗi. Để giai quyết vấn đề này, có một số phần mềm hỗ trợ chúng ta việc test như Test Complete. Tất nhiên chúng đều yêu cầu bản quyền, trong khi Visual Studio đã có sẵn cho chúng ta một cộng cụ test. Hôm nay mình xin được hướng dẫn mọi người cách sử dụng nó.
    Đầu tiên hãy thử làm vài bước kiểm tra trước khi sử dụng công cụ này đã. Vào menu Test -> Windows -> Test Explorer xem có hiện ra Test Explorer không. Nếu hiện ra rùi thì OK. Nếu không hiện ra thì làm như sau: ấn Windows + R (mở hộp thoại Run) -> nhập vào cmd -> ok


    Gõ vào:
    cd C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE  -> Enter
    devenv.exe /ResetSettings -> Enter
    Nếu vẫn không được hoặc gặp lỗi Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED)) :

    thì sử dụng lệnh devenv.exe /resetuserdata


    Sau khi Visual studio mở lên làm được như vậy là OK



    Đợi một lát cho Visual khởi động lên là xong làm lại Test -> Windows -> Test Explorer cho Test Explorer hiện lên.

    OK! Bây giờ hãy cùng tạo một project Test như sau: File -> new -> new project... ->chọn Test -> Coded UI Test Project ->OK (Như 2 hình dưới đây)



    chọn dòng bên trên


    Sau đó sẽ xuất hiện một hộp thoại nhở ờ góc phải-dưới



    OK, bây giờ muốn bắt đầu test một chương trình nào đó ta làm như sau:
    VD: mình test chương trình RightClick

    B1: Mở chương trình cần test lên
    B2: ấn vào nút Start Record (Alt + R) màu đỏ ở trong hộp thoại UIMap

    Sau đó bắt đầu test như nhập chữ, click nút, ... để test một chức năng của chương trình (nên test từng chức năng một). Sau khi test xong ấn lại nút đỏ một lần nữa (Alt + R), sau đó ấn nút Generate Code (Alt + G)  ngoài cùng của hộp thoại UIMap -> nhập thông tin cho test này


    Cuối cùng ấn nút close (x) để đóng UIMap lại.

    Bước tiếp theo vào Test -> Run -> All test -> chờ cho nó chạy xong test


    Sau khi nó chạy xong thì trong explorer sẽ có các test đã tạo:

    chuột phải vào test cần chạy -> Run Selected test


    Test nào thực hiện xong thì nó sẽ tích màu xanh vào cho, còn test nào lỗi (hoặc không thực hiện được xong thì nó sẽ tích màu đỏ)

    Chúc các bạn thành công với những chương trình hoàn thiện.s

    1/01/2014
    Đăng bởi :
    Nhãn :

    Hướng dẫn sửa lỗi "The DELETE statement conflicted with the REFERENCE constraint "FK_...""


    thuvienwinform - Đây là lỗi bị xung đột khóa ngoài khi xóa 1 bản ghi trong quan hệ  1-1 Sau đây mình xin hướng dẫn 1 cách sửa lỗi này. Cách sửa như sau: Ta sẽ xóa 1 bảng trong quan hệ 1-1 này đi, tất nhiên là phải backup nội dung của bảng trước rồi mới xóa. Sau khi xóa xong ta tạo lại bảng này và khôi phục nó!

    B1: Trong Visual Studio showdata bảng cần backup -> chuột phải bảng cần backup -> show table data -> ấn nút script

    -> được đoạn code:


    OK để đó đã

    B2: 

    Sau đó copy đoạn code nhận đc:


    B3: copy code B2 paste thêm vào đoạn code ở B1:


    B4: Bây giờ có thể xóa bảng đó đi rùi


    B5:
    Ấn nút Execute (CS+E) trong tab chứa code ở B3



    Vậy là bảng đã quay trở lại và cái quan hệ 1-1 đó cũng đã bị xóa! Chúc các bạn thành công

    12/31/2013
    Đăng bởi :
    Nhãn :

    Code Smells (Code bốc mùi)

    Code smells là một thuật ngữ rất phổ biến đối với các lập trình viên, vậy nó là gì, tại sao chúng ta phải quan tâm đến code smells, và tại sao phải hạn chế code smell bên trong mã lệnh của bạn? Hy vọng bài viết này sẽ giải đáp được phần nào cho các bạn mới làm quen với thế giới lập trình.
    Theo Wikipedia, Code smells (code mà bốc mùi, hoặc có mùi lạ trong code) là bất kỳ triệu chứng bất ổn nào bên trong mã nguồn của một chương trình, mà vì nó có thể sẽ dẫn đến các vấn đề lớn hơn. Code smells không phải là bugs (lỗi lập trình), nghĩa là chúng không làm sai chứ năng của ứng dụng. Thay vào đó, chúng là biểu hiện của sự yếu kém trong thiết kế và sẽ làm cho quá trình phát triển ứng dụng bị chậm lại hoặc tăng nguy cơ của bugs hoặc lỗi trong tương lai.
    Sau đây mình xin liệt kê các loại code smells mà bạn có thể gặp:

    Code smells bên trong class

    Comments (ghi chú): không nên sử dụng comment tùy tiện, bạn nên comment khi thực sự cần thiết. Một comment phải giải thích được "tại sao", chứ không phải là "cái gì". Bạn có thể cải tiến mã lệnh để không cần phải dùng comment được không? Khi đó tự mã lệnh giải thích cho nó mà không cần đến comment. Và lưu ý rằng, comment phải dễ hiểu, bởi nó dành cho con người, không phải để dành cho máy.
    Long method (Phương thức có độ dài lớn): Phương thức ngắn thì dễ đọc, dễ hiểu và dễ xử lý khi có lỗi xảy ra hơn. Hãy cố gắng chia tách những phương thức dài thành những phương thức nhỏ hơn khi bạn có thể.
    Long parameter list (quá nhiều tham số cho một phương thức): Phương thức càng nhiều tham số, nó càng phức tạp. Hãy hạn chế số lượng tham số cho một phương thức, hoặc bạn cần phải sử dụng một đối tượng chứa các tham số đó.
    Conditional complexity (độ phức tạp của các lệnh điều kiện): hãy cẩn thận với các khối lệnh điều kiện lớn, vì chúng thường sẽ phình to theo thời gian, bạn có thể tìm kiếm các cách khác theo lập trình hướng đối tượng để thay thế như các mẫu decorator, strategy, hoặc state.
    Combinitorial explosion: bạn có rất nhiều mã lệnh thực hiện phần lớn các công việc gần giống như nhau, nhưng chỉ khác nhau một xiu về dữ liệu hoặc hành vi. Trường hợp này không dễ để cải thiện, tuy nhiên, bạn có thể thử dùng generics hoặc interpreter.
    Large class (lớp có lượng mã lệnh rất lớn): các lớp có lượng mã lệnh lớn thường khó để đọc và hiểu. Liệu lớp bạn xây dựng có đảm trách nhiều vai trò quá không? Nếu vậy, bạn nên tái cấu trúc lớp đó thành nhiều lớp nhỏ hơn.
    Type embedded in name (tên phương thức có chứa tên kiểu dữ liệu trả về): Nếu phương thức của bạn có tên chứa tên kiểu dữ liệu trả về, bạn nên sửa lại, bởi vì khi bạn thay đổi kiểu dữ liệu trả về, bạn phải thay đổi tên của phương thức.
    Uncommunicative name (tên lạ, tên khó hiểu): Đây là trường hợp tên của phương thức không diễn tả được mục đích của phương thức, và tên khó đọc. Bạn nên đổi tên các phương thức kiểu như vậy.
    Inconsistent names (cách đặt tên không nhất quán): bạn nên thống nhất cách đặt tên nhất quá cho các phương thức. Ví dụ nếu bạn có phương thức Open(), bạn nên có phương thức Close().
    Dead code (mã lệnh không sử dụng): Hãy xóa các mã lệnh không còn sử dụng. Nếu bạn lo rằng tới một ngày kia bạn sẽ cần phải sử dụng nó, bạn đừng lo, bởi nếu có sử dụng các công cụ Version Controls, chúng sẽ lưu lại các phiên bản cũ cho bạn.
    Speculative generality: hãy viết code để giải quyết vấn đề hiện tại, và chỉ quan tâm đến các vấn đề tương lai nếu chúng thực sự cần thiết, nếu không hãy bỏ qua. Bạn cần tuân thủ nguyên tắc YAGNI (You Ain’t Gonna Need It). Tôi sẽ sớm có bài viết về YAGNI.
    Oddball Solution (inconsistent solution – giải pháp không nhất quán): Bạn chỉ nên dùng một cách duy nhất để xử lý một vấn đề bên trong mã lệnh của bạn nếu không bạn đã mắc phải code smell Oddball Solution.
    Temporary Field (trường tạm): Đừng để quá nhiều trường tạm, không cần thiết trong mã cài đặt các đối tượng của bạn.

    Code smells giữa các class với nhau

    Các class tương tự nhau nhưng bề ngoài khác nhau: Nếu hai lớp giống nhau bên trong, nhưng lại khác nhau ở bên ngoài, thì bạn nên sửa chúng để chúng cùng chung một interface.
    Primitive Obsession (nỗi ám ảnh về kiểu dữ liệu nguyên thủy): đối với những người mới làm quen với lập trình hướng đối tượng, đôi khi họ lưu những thông tin của đối tượng bên trong đối tượng khác bằng cách sử dụng các kiểu primitive. Nếu dữ liệu đủ phức tạp, bạn nên sử dụng một lớp để thể hiện nó.
    Data class: các lớp dữ liệu, có chứa các trường lưu dữ liệu, các getters và setters, nhưng ngoài ra không còn gì cả. Code smell ở đây là các lớp này chỉ chứa dữ liệu và được khởi tạo một cách quá chi tiết bởi các lớp khác. Cần phải đảm bảo tính đóng gói của các lớp này.
    Data clumps: Nếu bạn thấy các phần tử dữ liệu hay đi kèm với nhau tại nhiều nơi, ví dụ như các trường bên trong một vài lớp, là tham số của nhiều phương thức, bạn nên gộp chúng lại thành đối tượng.
    Refused Bequest: Bạn sử dụng kế thừa, nhưng lại hầu như không sử dụng các phương thức được kết thừa, vậy liệu có nên sử dụng kế thừa không?
    Inappropriate Intimacy: Các lớp không nên xử liệu quá nhiều công việc của nhau. Các lớp nên biết về nhau càng ít càng tốt.
    Indecent Exposure: Các lớp không nên "show" quá nhiều nội tình bên trong nó. Khi bạn công khai một trường hoặc một phương thức của một class, bạn cần phải có lý do thực sự hợp lý, nếu không, hãy giấu chúng đi.
    Feature Envy: Đây là trường hợp một lớp có một phương thức được sử dụng nhiều hơn bởi lớp khác hơn là chính lớp đó. Nếu trường hợp như vậy xảy ra, bạn nên di chuyển phương thức đó sang lớp kia.
    Lazy Class (lớp lười nhác): Không nên tồn tại những lớp không thực hiện việc gì cả. Việc có càng nhiều lớp, sẽ càng làm phức tạp cho dự án của bạn. Nếu một lớp được sinh ra chả để làm gì cả, bạn có thể nghĩ đến việc xóa nó, hoặc hợp nó với một lớp khác.
    Message Chains (chuỗi thông điệp): Có những trường hợp, code của bạn gọi mỗi chuỗi các phương thức từ các đối tượng để lấy dữ liệu nào đó, ví như var ().getAnotherThing().getAnotherThing2….
    Middle Man (lớp trung gian): nếu một lớp trung gian chỉ có mặt để truyền lời gọi đến các lớp khác, thì lớp đó không nên tồn tại.
    Divergent Change: nếu bạn đổi một phần này của lớp và kéo theo phải đổi các phần khác của lớp, thì có thể nó đang mang trong mình nhiều thứ không liên qua. Hãy nghĩ đến việc cô lập các phần có thể gây ảnh hưởng và chuyển qua một lớp khác.
    Shotgun Surgery: Nếu thay đổi của một lớp gây sự thay đổi đến nhiều lớp khác, thì bạn nên nghĩ đến việc cải tổ code để hạn chế sự thay đổi chỉ ảnh hưởng đến bên trong lớp đó.
    Parallel inheritance hierarchies: code smell này là hiện tượng khi bạn thêm một lớp con của một lớp này, thì bạn cũng phải tạo thêm lớp con của một lớp khác.
    Incomplete Library Class: đây là code smell khi chúng ta cần thêm một phương thức vào một lớp trong thư viện, nhưng chúng ta không thể thay đổi thư viện để thêm phương thức đó vào.
    Solution Sprawl: để thực hiện một việc gì đó, bạn cần quá nhiều các lớp khác nhau tham gia (trên 5 lớp), thì đó là dấu hiệu của code smell Solution Sprawl. Hãy nghĩ tới việc đơn giản hóa thiết kế của bạn.

    Lời kết

    Bài viết về code smells này chỉ mang tính chất giới thiệu sơ đẳng, và do thời gian có hạn nên bài viết chưa lý giải được hoàn toàn rõ ràng về các code smells, và cách thức xử l

    Nguồn: hocchoi.com
    12/30/2013
    Đăng bởi :
    Nhãn :

    Hướng dẫn sửa lỗi "Unable to access T-SQL components" trong Visual Studio 2012


    thuvienwinform - Lỗi này gặp phải khi ta update SQL Server! Nó làm ta không xem đc CSDL trực tiếp trong Visual Studio (VS). Dấu hiệu như sau: khi ấn hiện thị CSDL bằng VS thì nó xuất hiện thông báo như trên kia và hộp thoại thứ 2 là "An incompatible DacFx version is installed" Cách sửa khá đơn giản, bạn chỉ cẩn tải về 2 bản update sau:


    Sau khi cài 2 bản update này sẽ có thể mở CSDL trực tiếp trong VS.



    Gợi ý code lấy địa chỉ IP người khác

    - Mình không khuyến khích các bạn dùng địa chỉ IP làm việc xấu nhé (vì mình cũng không biết hậu quả của việc biết địa chỉ IP người khác :V)
    - Yêu cầu: có 1 database online (đăng kí tại somee.com) xem hướng dẫn tại đây
    - Thế này: ta xây thêm vào form 1 cái webrowser (wb) và ẩn nó đi, cho cái wb này chỉ đến địa chỉ  http://whatismyipaddress.com/. Thêm cho wb này sự kiện docmentcomplete là khi load xong trang xem ip kia thì Insert mã nguồn (DocumentText) của wb lên database. Sau đó ta lấy dữ liệu nhận đc từ database có phải là đã có IP của nạn nhân
    - Về cái form thì thêm cho nó một số chức năng giải trí như game flash nào đó hoặc một mầu truyện cười (vì trang xem IP khoảng 10s là load xong, Nếu không thì đặt sự kiện FormClose thành Hide là được)
    - Chỉ là gợi ý thui, mình không code cụ thể nhé! Và không chịu hậu quả hâu ra :V. Cái này chỉ là kết nối mạng nên không bị diệt virus phát hiện
    12/01/2013
    Đăng bởi :
    Nhãn :

    API là gì? Ứng dụng của nó như thế nào?


    thuvienwinform - Đơn giản như thế này, hiện nay nhiều người dùng mạng xã hội facebook và bạn muốn viết một ứng dụng để đăng tin lên mạng xã hội này. Vậy làm sao để làm một ứng dụng như vậy khi facebook là của người khác? Hiểu được nhu cầu này của các lập trình viên facebook sẽ đưa ra các thư viện chứa các hàm đăng, like, share...trên trang của mình để các lập trình viên khai thác! Đó chính là API
    Google+, Gmail, Blogger, Youtube, các ứng dụng của windows (Windows media player, Internet Explorer,..), nhaccuatui, zingmp3,...rất nhiều các trang web, ứng dụng đưa ra các API để hỗ trợ các lập trình viên

    - API (Application Programming Interface - Giao diện lập trình ứng dụng). Mỗi hệ điều hành, ứng dụng đều có những bộ API khác nhau. Nó cung cấp cho người lập trình các hàm tương tác với CSDL, lập trình thực hiện các thao tác với hđh hay phần mềm đó. Hầu hết các hàm API được chứa trong các file DLL
    - Ví dụ: Các hàm API của hđh windows cho phép chúng ta lập trình ứng dụng thay đổi icon màn hình, xem thông tin máy tính, ... hay các hàm API của google cho phép lập trình viên lấy thông tin, sửa thông tin người dùng,...Các hàm API của facebook cho chúng ta đăng stt, ảnh, cmt,...
    - Vậy API có phải một ngôn ngữ lập trình không? Câu trả lời là không các bạn ạ. Các hàm API cũng như các hàm bình thường mà chúng ta hay viết và trên từng ngôn ngữ khác nhau cũng có các bộ API tương ứng khác nhau.
    - Ví dụ: Google API có bộ cho .NET, PHP,..
    - Và mỗi bộ API hầu như đều có hướng dẫn sử dụng rất cụ thể và chi tiết. Ví dụ của hướng dẫn sử dụng các hàm API đối với blogger: https://developers.google.com/blogger/docs/2.0/developers_guide_dotnet rất hữu ích cho ai muốn viết ứng dụng quản lí blog


    - Ví dụ một đoạn code đăng bài cho blog sử dụng API của google:

    void DangBai(Service service, string bID, string title, string content, bool isDraft)
            {
                //Tạo các thuộc tính của bài đăng
                Uri blogPostUri = new Uri("http://www.blogger.com/feeds/" + bID + "/posts/default");
                AtomEntry newPost = null;
                newPost = new AtomEntry();
                newPost.IsDraft = isDraft;
                newPost.Title.Text = title;
    
                newPost.Content = new AtomContent();
                newPost.Content.Content = content;
                newPost.Content.Type = "html";
                newPost.Updated = new DateTime(2011, 1, 1, 10, 0, 0);
                newPost.Published = new DateTime(2011, 1, 1, 10, 0, 0);
                //Đăng bài
                AtomEntry CreateEntry = service.Insert(blogPostUri, newPost);
            }
    
    
    Một số bài về API:
    - Phát nhạc: http://thuvienwinform.blogspot.com/2014/04/api-phat-nhac-mp3_13.html
    - Kiểm tra kết nối mạng: http://thuvienwinform.blogspot.com/2014/04/api-kiem-tra-ket-noi-internet.html
    - Facebook API: http://facebooksdk.net/
    - Google API: https://code.google.com/p/google-api-dotnet-client/wiki/APIs
    + Hướng dẫn A-Z Google API cho Blogspot: http://garyngzhongbo.blogspot.com/2013/10/bloggerc-blogger-api-v31.html
    - Tìm trên nhaccuatui: http://diendan.congdongcviet.com/threads/t57486::lay-link-nhac-an-tu-trang-nhaccuatui-com.cpp

    11/27/2013
    Đăng bởi :
    Nhãn : ,

    Code lấy thông tin máy tính bằng C# (Tên máy, tài khoản người dùng, phiên bản hệ điều hành, địa chỉ MAC,...)



    Code lấy tên máy, phiên bản HĐH, địa chỉ IP, địa chỉ MAC bằng C#

    - Demo: https://www.dropbox.com/s/8xw85oo6xg8v86c/ThongTinHeDieuHanh.rar (52KB)
    - Để lấy thông tin cơ bản như tên máy, tài khoản đăng nhập vào máy, phiên bản hệ điều hành ta sử đụng lớp Environment sẵn có để lấy những thông tin đó. Ví dụ: Environment.MachineName để lấy tên máy, Environment.UserName để lấy tài khoản đăng nhập vào máy,...

    - Để lấy các địa chỉ IP mà máy đang có (Đang kết nối đến bao nhiêu mạng thì có bằng đó IP): http://www.thuvienwinform.tk/2013/10/code-lay-username-va-ip-cua-may.html

    - Để lấy địa chỉ MAC ta sử dụng thêm using System.Net.NetworkInfomation;
    Code lấy địa chỉ MAC như sau: (cảm ơn anh LNT đã share cho mình code này)

                /////////////////
                //Lấy địa chỉ MAC
                ////////////////  
                string DanhSachMAC = "";
                NetworkInterface[] DanhSachCardMang = NetworkInterface.GetAllNetworkInterfaces();
                for (int i = 0; i < DanhSachCardMang.Length; i++)
                {
                    PhysicalAddress DiaChiMAC = DanhSachCardMang[i].GetPhysicalAddress();
                    DanhSachMAC += DanhSachCardMang[i].Name + " : ";
                    byte[] ByteDiaChi = DiaChiMAC.GetAddressBytes();
                    for (int j = 0; j < ByteDiaChi.Length; j++)
                    {
                        DanhSachMAC += ByteDiaChi[j].ToString("X2");
                        if (j != ByteDiaChi.Length - 1)
                        {
                            DanhSachMAC += "-";
                        }
                    }
                    DanhSachMAC += "\r\n";
                    txtMAC.Text += DanhSachMAC;
                }
    
    
    hoặc

                /////////////////
                //Lấy địa chỉ MAC
                ////////////////
                int l, i, j=0;
                string MAC;
                while (true)
                {
                    try
                    {
                        MAC = NetworkInterface.GetAllNetworkInterfaces()[j].GetPhysicalAddress().ToString(); //đến đây đã lấy được địa chỉ rồi nhưng chưa có dấu phân cách
                        l = MAC.Length - 1;
                        for (i = 0; i <= l; i++)
                        {
                            if (i % 2 == 0 && i != 0) txtMAC.Text += "-";
                            txtMAC.Text += MAC[i];
                        }
                        j++;
                        txtMAC.Text += "\r\n";
                    }
                    catch
                    {
                        break;//Hết địa chỉ MAC rồi thì ngắt vòng lặp
                    }
                }
    
    Với cách 2 chạy lâu hơn rất nhiều :) khuyến cáo không nên dùng.

    11/20/2013
    Đăng bởi :
    Nhãn :

    Nhận ngay 100$ cho VPS

    Mua hàng ủng hộ page

    Ủng hộ page

    Nhãn

    Code (45) Team Foundation Server (17) Database (14) News (14) product (13) toolbox (10) Linq (9) SoftDesign (8) XNA (6) API (5) Project (5) item (4)

    - Bản quyền thuộc về Thư Viện WinForm - Giao diện: Metrominimalist - Thiết kế: Johanes Djogan -