Tài liệu lập trình - giải thích SET và GET trong C#
lượt xem 70
download
Trong 1 class ta c n phân bi t rõ và làm quen các khái ni ầ ệ ệm sau: trường(field), biến(property) và phương thức (method). Sau đây mình ví dụ 1 class HocSinh public class HocSinh { string hoten;//khai báo thế này thì hoten là 1 truong(field) dạng private // giống khai báo private string hoten; public string HoTen //khai bao 1 bien(property) co ten la HoTen
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Tài liệu lập trình - giải thích SET và GET trong C#
- Trong 1 class ta cần phân biệt rõ và làm quen các khái niệm sau: trường(field), biến(property) và phương thức (method). Sau đây mình ví dụ 1 class HocSinh public class HocSinh { string hoten;//khai báo thế này thì hoten là 1 truong(field) dạng private // giống khai báo private string hoten; public string HoTen //khai bao 1 bien(property) co ten la HoTen { get{ return hoten;}//đọc giá trị lên từ field hoten gán cho biến HoTen set { hoten = value;}//lấy giá trị(value) truyền vào cho biến để gán cho trường } public HocSinh()//phương thức mặc định {} public int TimHocSinh(string ten)//day la 1 phuong thuc { //code xu ly tim hoc sinh } } Bạn nhìn lại đoạn code trên và ta thấy rằng khai báo biến khác với 1 phương thức là nó không có phần dấu (). Phương thức là ta dùng viết code Tìm, Thêm , Xóa, Sửa..hoặc 1 thao tác gì đó do bạn tự viết. Đa số chúng ta ít khai báo biến. vì sao? vì đa số các bạn mới làm quen lập trinh C# thường khai báo 1 trường(field) ở dạng public(vd: public string hoten;). Nhưng để baỏ mật các lập trình viên chuyên nghiệp hay khai báo ở dạng private như ví dụ trên. Nếu khai báo private như vậy thì nếu bạn đang ở 1 class khác bạn sẽ không nhìn thấy 1 trường private và sẽ không truy xuất đc nó. Do vậy trong C# hỗ trợ khai báo biến đi cùng với 2 phương thức get và set để giúp chúng ta giải quyết vấn đề vừa nêu. Ứng với mỗi 1 trường private thì ta nên khai báo 1 biến và biến cùng kiểu với trường. ở đoạn code trên do trường "hoten" có kiểu string nên khai báo biến HoTen phải có kiểu trả về là string. Ta dùng "get" để lấy giá trị của field gán cho biến(property), "set" dùng giá trị của biến để thiết lập giá trị cho field. Nếu như 1 biến nào đó bạn chỉ cho người ta lấy(đọc) giá trị từ field lên thôi thì bạn chỉ cần dùng phương thức get. Ví dụ ở 1 class khác ta khai báo HocSinh hs = new HocSinh(); khi bạn gọi: hs.HoTen = "NguyenVanA" thì phương thức set{} sẽ được gọi, sau khi chạy xong câu lệnh này thì thực chất hs.hoten ="NguyenVanA" do set{hoten = value;} và khi bạn gọi: string name = hs.HoTen thì phương thức get{} sẽ được gọi, giá trị của hs.HoTen là giá trị đọc lên từ hs.hoten với lệnh get {return hoten;} Tác dụng của 2 Phương thức get và set giúp cho việc truy xuất giá trị của 1 1
- trường được bảo mật hơn. Chúng như là công cụ trung gian để vận chuyển giá trị của field với giá trị người dùng(nhập dl). Và khi đã làm như vậy ta có thể quên trường đi và thao tác với biến như là mình đang thao tác với trường vậy. Có 1 cái hay nữa trong cách dùng phương thức set là ta có thể kiểm soát, kiểm tra giá nhập vào có hợp lệ theo ý ta ko. nếu hợp lệ thì ta mới cho gán vào trường(field). Ví dụ ta có thêm trường maHS để lưu thông tin mã học sinh với yêu cầu mã có chiều dài là 7. thì ta làm string maHS; public string MaHS { get { return maHS; } set { while (value.Length != 7)// kiem tra neu ko hop le thi nhap lai { Console.Write("\n Ma khong hop le! Nhap lai = "); value = Console.ReadLine(); } maHS = value;//khi nao chieu dai chuoi nhap vao la 7 thi moi gan cho trường maHS } } như sau: Lập trình C# | Bàn về kích thước và vị trí của Form Lớp Form cung cấp những thuộc tính Location (vị trí) và Size (kích thước) mà mỗi ô control đều có, nhưng với một “méo mó” một chút. Thuộc tính Location cho biết khoảng cách ở góc top left của cửa sổ so với góc top left của màn hình (hoặc desktop area) trở đi. Ngoài ra, Location sẽ bị phớt lờ trừ khi thuộc tính StartPosition được cho về Manual. Các trị của thuộc tính StartPosition sẽ lấy từ enum FormStartPosition, như dưới đây: Các trị Mô tả CenterParent Nếu form được hiển thị theo kiểu modal, thì nó sẽ được canh giữa tương đối với biểu mẫu hiển thị nó. Nếu biểu mẫu này không có cha-mẹ, thì đặt để này giống như WindowsDefaultLocation CenterScreen form được căn giữa màn hình. Ví dụ: StartPosition = 2
- FormStartPosition.CenterScreen Manual form sẽ được canh theo vị trí được khai báo bởi thuộc tính Location, tương đối so với top left của desktop area WindowsDefaultLocation form được hiển thị theo vị trí mặc nhiên của Windows. Nói cách khác, sẽ không biết chính xác biểu mẫu sẽ được canh về đâu WindowsDefaultBound form được hiển thị theo vị trí mặc nhiên của Windows với một kích thước mặc nhiên (thuộc tính Size bị bỏ qua). Thiết đặt này ít khi dùng tới vì thông thường người ta muốn điều khiển chính xác kích thước của biểu mẫu Thỉnh thoảng, bạn cần cẩn thận 1 chút khi chọn vị trí và kích thước đối form của bạn. Thí dụ, bạn có thể vô tình tạo ra 1 form quá lớn để có thể thích nghi với 1 màn hình có độ phân giải thấp. Nếu bạn làm việc với 1 ứng dụng chỉ độc nhất 1 form, giải pháp tốt nhất là tạo 1 form có thể thay đổi kích thước. Nếu bạn dùng 1 ứng dụng với nhiều cửa sổ bay lung tung thì câu trả lời là không đơn giản chút nào. Tất nhiên, bạn sẽ nghĩ mình có thể giới hạn vị trị cửa sổ vào vị trí mà những màn hình có độ phân giải nhỏ có thể hỗ trợ, nhưng làm vậy thì thiệt thòi cho những người sử dụng đang sở hữu màn hình có độ phân giải cao (do nhu cầu về thiết kế đồ họa,đọc biểu mẫu,…). Và câu hỏi mà tôi đặt ra cho bạn là phải tìm vị trí thích hợp nhất của form đối với màn hình của người sử dụng. Muốn giải quyết, bạn cần tìm lại những thông tin cơ bản đối với mặt bằng màn hình có sẵn sử dụng đến lớp Screen Code: private void Form_Load(sender,EventArgs e) //event Load của Form { Screen scr = Screen.PrimaryScreen; //đi lấy màn hình chính this.Left = (scr.WorkingArea.Width – this.Width)/2; 3
- this.Top = (scr.WordkingArea.Height – this.Height)/2; } Ví dụ trên sử dụng thuộc tính WorkingArea của lớp Screen. Thuộc tính này trả về vùng làm việc của màn hình, trừ đi vùng chiếm dụng bởi thanh taskbar, bởi thanh công cụ cập bến (docked toolbar), và bởi các cửa sổ cập bến (docked windows). Và dưới đây liệt kê các thành viên của lớp Screen: Các thành viên Mô tả PrimaryScreen Hàm static này trả về 1 đối tượng Screen tượng trưng cho màn hình chính trên hệ thống. Bounds Hàm này trả về 1 cấu trúc Rectangle tượng trưng cho biên giới của vùng hiển thị (display area) đối với màn hình hiện hành. WorkingArea Hàm này trả về 1 cấu trúc Rectangle tượng trưng cho biên giới vùng hiển thị đối với màn hình hiện hành, trừ đi khoảng mặt bằng chiếm dụng bởi thanh taskbar, thanh công cụ cập bến, và bất cứ cửa số cập bến nào. DeviceName Hàm này trả về tên thiết bị được gắn liền với 1 màn hình theo dạng 1 chuỗi Gỉai thích phương thức phương thức convert trong net Có 2 cách convert từ chuỗi sang số. Cách 1 là cách của bạn: Convert.ToInt32(s); Cách 2 là: Int32.Parse(s) Mình đã test cách 2 nhanh hơn cách 1 tí xíu (2144-2071). Nhưng cách 1 hay hơn vì nó trực quan và convert sang kiểu nào cũng được. Còn cách 2 có 4 hàm thôi thì phải. Chả hiểu .NET nó cho 2 cái để làm gì Cách 2 thì tất nhiên nhanh hơn, việc cung cấp 2 cách chuyển đổi này để phù hợp với từng mục đích sử dụng. Cách convert sẽ lâu hơn vì nó phải kiểm tra dữ liệu trước khi thực hiện chuyển đổi, tùy theo kiểu cần chuyển mà giá trị trả về của nó sẽ khác các 4
- Parse hay ko, ví dụ nếu Convert.ToInt32() một đối tượng null thì sẽ trả về 0, còn nếu dùng Parse() thì sẽ bị ném ra 1 exception. Ngoài cách dùng Parse bạn có thể dùng TryParse() để hạn chế exception, thay vì ném ra 1 exception thì phuơng thức TryParse() sẽ trả về false Ca Nguyen Tôi không giỏi, nhưng tôi là duy nhất Tìm kiếm: Trang chủ • Bài viết Phản hồi C# • o Những cái mới trong C# 2010 Khác • .Net 4.0 • ← MEF (Managed Extensibility Framework) Sử dụng C# kết nối Database → Bạn cần đưa “2 triệu số” vào combobox? Làm cách nào để nhanh nhất? 19.11.2010 bởi canh1412 2 phản hồi 1 Vote Control Combobox rất quen thuộc với người lập trình,nhưng đã có lúc nào bạn đã thêm một số lượng lớn dữ liệu vào combobox chưa? khoảng 2 triệu số xem sao? tức sẽ có 2 triệu mục trong combobox…. Đặc điểm của combobox, chỉ khi nào toàn bộ dữ liệu được đưa vào trong Combobox thì chúng mới show lên. Bài này xin giới thiệu sử dụng combobox kết hợp với constrol VSscrollBar và control timer. Ý tưởng như sau: Ta thấy rằng không cần thiết một số lượng cực lớn dữ liệu vào một lúc như thế, ta chỉ cần đưa vào số lượng dữ liệu cần thiết đúng bằng chiều cao 5
- combobox/ chiều cao của mỗi items. Vấn đề là khi nào cần thấy đổi giá trị dữ liệu trong combobox? Đó là lúc người dùng kéo thanh crollbar, thanh crollbar tự động của combobox không xử lí được vấn đề này, vì vậy ta sẽ sự dụng VScrollBar của VS. Để làm rõ hơn, mình xin lấy ví dụ: tìm tất cả các số rất hạnh phúc và rất không hạnh phúc. số rất hành phúc là số có 8 chữ số,và đó là số nguyên tố có tổng các chữ số nữa đầu bằng nữa cuối, ví dụ 10010101 là số rất hạnh phúc,còn rất không hạnh phúc là số nguyên tố không có tổng nứa đầu bằng nữa cuối. Ta thiết kê giao diện: (VS2010-C#) Đâu tiên khai báo hai mảng chứa số: Sử dụng thuật toán sàn để lọc số nguyên tố: 6
- Thuộc tính quan trọng của VScrollBar là Minimum , Maximum, chúng ta cần khởi gán giá trị cho nó để xác định khoảng thay đổi, thuộc tính value để lấy giá trị hiện tại của VScrollbar . Bitarray là một kiểu dự liệu trong C# nó tương đương với khai báo “bool[] mang” nhưng là việc nhanh hơn và thuận tiện hơn, trong trường hợp này. ” len ở đây tính ra số lượng items mà chúng ta thấy trong combobox, Load vào combobox: Hàm này có tác dụng đưa dữ liệu vào combobox, số lượng đưa vào là tùy thuộc tham số “len2″;. Tiếp theo, để có thể cập nhật, tức sử dụng hàm trên để thay đổi dữ liệu trên combobox, ta cần dùng timer để kích hoạt hàm trên: 7
- giatricubo khởi gán lúc đầu bằng 1: khi ta kéo vScrollbar tức đã làm value của VScrollBar thay đổi. khi đó hàm sẽ được gọi, ta đình thuộc tình interval của timer là 50milisecond. Cuối cùng xử lí event click của button: ta chỉ đưa số lượng dữ liệu vừa đủ vào trong combobox: " lencbo = lstSoRatKhongHanhPhuc.Height / lstSoRatKhongHanhPhuc.ItemHeight;" Làm theo cách này, với bài này chỉ mất khoảng 7s là đã chạy được chương trình. theo cách thông thường, mình chạy thử 30' không xong^^. Trên đây mình chỉ trình bày về hiện thị số rất không hạnh phúc, còn số hạnh phúc thì tương tự nhé! Source code:Tải về SqlCommandBuilder để làm gì Ko biết mọi người đã biết công dụng của nó chưa? Nhưng mình thì mới biết (chắc thầy có nói nhưng lười đi học nên giờ mới biết ) Nguyên văn của Microsoft you can create a SqlCommandBuilder object to automatically generate Transact- SQL statements for single-table updates if you set the SelectCommand property of the SqlDataAdapter => Nói ngắn gọn là nó sẽ tự thực hiện những câu lệnh truy vấn cho mình khi mình chỉ đưa vào 1 câu truy vấn select => Để làm gì nhỉ? Tự viết cũng đc mà Tuy nhiên giả sử cái bảng của chúng ta có 20 cột và mình phải insert or update bằng đó cột thì cách viết đó ko hề khả thi. Microsoft đưa ra class SqlCommandBuilder để giảm bớt việc sai sót khi thực hiện 8
- những câu truy vấn đó Cách sử dụng: - Đầu tiên cần có 1 SqlDataAdapter với câu truy vấn Select - Tiếp đó bạn cần có 1 cái DataSet or DataTable để có thể thực hiện các truy vấn khác (yêu cầu là các control này phải có dữ liệu, hôm mình đi thực hành cứ new DataSet và cuối cùng nó toàn báo lỗi, bực quá ko thèm làm nữa) - Và điều quan trọng nữa là cái bảng mình chọn để truy vấn bắt buộc phải có khoá chính (mình hay bị mắc lỗi này tại bên SQL ko tự chèn khoá chính =>mà edit lại bảng thì gặp cái lỗi nì) if ko có khoá chính thì mọi người sẽ gặp cái thông báo này Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information Ngay dòng thực hiện câu truy vấn Update,Insert,Delete Đây là code của Microsoft nè: PHP Code: public static DataSet SelectSqlRows(string connectionString, string queryString, string tableName) { using (SqlConnection connection = new SqlConnection(connectionString )) { SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = new SqlCommand(queryString, connection) ; SqlCommandBuilder builder = new SqlCommandBuilder(adapter); connection.Open(); DataSet dataSet = new DataSet(); adapter.Fill(dataSet, tableName); //code to modify data in DataSet here builder.GetUpdateCommand(); //Without the SqlCommandBuilder this line would fail adapter.Update(dataSet, tableName); return dataSet; } } Cũng chưa test nữa nhưng chắc chắn nếu sử dụng hệ CSDL nào mà có hỗ trợ CommandBuilder đều có thể làm tương tự ách xuất dữ liệu ra file excel trong lập trình C#. 9
- Cách xuất dữ liệu ra file excel trong lập trình C#. Khi viết một chương trình quản lý ta thường phải in ấn rất nhiều thứ. Ví dụ in danh sách lớp, bảng điểm…. Một cách truyền thống mà từ trước đến nay ta vẫn hay dùng đó là dùng Crystal Report, nhưng thực tế ta có thể viết code để cho xuất ra file Excel, word hay pdf… tùy ý thích. Một trong những cách đơn giản và hay được dùng nhất là xuất ra file excel. Sau đây mình sẽ trình bày cách xuất dữ liệu ra file excel: + Môi trường triển khai là bộ tool visual Studio 2005, hoặc 2008 hay 2010 tùy thích. + Ngôn ngữ lập trình là C#. + Một điều kiện nữa là máy của bạn phải cài Microsoft office. Công việc gồm các bước sau: Bước 1: Reference đến đối tượng sau: Bạn chọn Website/Add Reference (đối với dự án là website) hoặc Project/Add Reference (đối với dự án là winform) cửa sổ Add reference xuât hiện. Bạn chọn tab .NET sau đó chọn Microsoft.Office.Interop.Excel (chọn version 11.0 hoặc 12.0) Bước 2: Và trong file code C# bạn khai báo sử dụng Namespace này: using COMExcel = Microsoft.Office.Interop.Excel; “COMExcel” là tên đối tượng bạn tạo ra nên bạn có thể dùng tên khác. Bước 3: Khởi tạo các đối tượng (dùng trong trường hợp tạo mới một file Excel): Ứng dụng Excel bao gồm các thành phần sau: - Application (chương trình excel) - Workbook (file xls làm việc, có nhiều workbook trong app) - Worksheet (có nhiều worksheet trong workbook) Như vậy ta phải khởi tạo cả 3 đối tượng trên như sau: COMExcel.Application exApp = new COMExcel.Application(); COMExcel.Workbook exBook = exApp.Workbooks.Add(COMExcel.XlWBATemplate.xlWBATWorksh eet); COMExcel.Worksheet exSheet = (COMExcel.Worksheet)exBook.Worksheets[1]; Bước 4: Sau đó để làm việc với ứng dụng bạn tạo ra ta dùng lệnh sau: exBook.Activate(); exSheet.Name = "BangDiem"; // Tên của sheet bạn làm việc. Bước 5: Ghi dữ liệu vào sheet bạn làm việc: COMExcel.Range tenTruong = 10
- (COMExcel.Range)exSheet.Cells[1, 1]; //Ghi dữ liệu lên hàng 1, cột 1 trong vùng làm việc của Excel thực chất là ô A1; tenTruong.Font.Size = 18; // Cỡ chữ 18. tenTruong.Font.Bold = true; //Cho in đậm tenTruong.Value2 = "Giá trị cần ghi vào”; Bước 6: Hiển thị chương trình Excel: exApp.Visible = true; Trên đây là các bước cơ bản để bạn tạo ra một file Excel, ghi dữ liệu vào file Excel. Từ những điều này bạn có thể dùng nó để ghi dữ liệu mà bạn có trong CSDL ra file Excel bằng cách: + Tạo DataTable chứa dữ liệu bạn muốn Xuất ra Excel. + Rồi thực hiện các bước như trên để ghi dữ liệu ra Excel: (Khi ghi ta ghi từng record một ra hàng và cột Excel tương ứng). Trên đây mình đã trình bày xong phần xuất dữ liệu ra Excel. Khi nào có thời gian mình sẽ trình bày cách dùng C# để kết nối đến dữ liệu là file Excel để đọc dữ liệu trong file Excel đó. Đây là một class trong quá trình làm việc nghiên cứu được. Nó cho phép xuất tốt tiếng việt trong PHP. 1. File load dữ liệu PHP Code: 2.File thư viện - đặt tên cho file thư viện là : php-excel.class.php PHP Code:
- * @author Oliver Schwarz * @version 1.0 */ /** * Generating excel documents on-the-fly from PHP5 * * Uses the excel XML-specification to generate a native * XML document, readable/processable by excel. * * @package Utilities * @subpackage Excel * @author Oliver Schwarz * @version 1.1 * * @todo Issue #4: Internet Explorer 7 does not work well with the given header * @todo Add option to give out first line as header (bold text) * @todo Add option to give out last line as footer (bold text) * @todo Add option to write to file */ class Excel_XML { /** * Header (of document) * @var string */ private $header = "\n"; /** * Footer (of document) * @var string */ private $footer = ""; /** * Lines to output in the excel document * @var array */ private $lines = array(); /** * Used encoding * @var string */ private $sEncoding; /** * Convert variable types * @var boolean */ private $bConvertTypes; 12
- /** * Worksheet title * @var string */ private $sWorksheetTitle; /** * Constructor * * The constructor allows the setting of some additional * parameters so that the library may be configured to * one's needs. * * On converting types: * When set to true, the library tries to identify the type of * the variable value and set the field specification for Excel * accordingly. Be careful with article numbers or postcodes * starting with a '0' (zero)! * * @param string $sEncoding Encoding to be used (defaults to UT F-8) * @param boolean $bConvertTypes Convert variables to field spe cification * @param string $sWorksheetTitle Title for the worksheet */ public function __construct($sEncoding = 'UTF-8', $bConvertTypes = false, $sWorksheetTitle = 'Table1') { $this->bConvertTypes = $bConvertTypes; $this->setEncoding($sEncoding); $this->setWorksheetTitle($sWorksheetTitle); } /** * Set encoding * @param string Encoding type to set */ public function setEncoding($sEncoding) { $this->sEncoding = $sEncoding; } /** * Set worksheet title * * Strips out not allowed characters and trims the * title to a maximum length of 31. * * @param string $title Title for worksheet */ public function setWorksheetTitle ($title) { $title = preg_replace ("/[\\\|:|\/|\?|\*|\[|\]]/", "", $title); $title = substr ($title, 0, 31); $this->sWorksheetTitle = $title; 13
- } /** * Add row * * Adds a single row to the document. If set to true, self::bCo nvertTypes * checks the type of variable and returns the specific field s ettings * for the cell. * * @param array $array One-dimensional array with row content */ private function addRow ($array) { $cells = ""; foreach ($array as $k => $v): $type = 'String'; if ($this->bConvertTypes === true && is_numeri c($v)): $type = 'Number'; endif; $v = htmlentities($v, ENT_COMPAT, $this- >sEncoding); $cells .= "" . $v . "\n"; endforeach; $this->lines[] = "\n" . $cells . "\n"; } /** * Add an array to the document * @param array 2-dimensional array */ public function addArray ($array) { foreach ($array as $k => $v) $this->addRow ($v); } /** * Generate the excel file * @param string $filename Name of excel file to generate (...x ls) */ public function generateXML ($filename = 'excel-export') { // correct/validate filename $filename = preg_replace('/[^aA-zZ0-9\_\-]/', '', $file name); // deliver header (as recommended in php manual) header("Content-Type: application/vnd.ms-excel; charset =" . $this->sEncoding); header("Content-Disposition: inline; filename=\"" . $fi lename . ".xls\""); 14
- // print out document to the browser // need to use stripslashes for the damn ">" echo stripslashes (sprintf($this->header, $this- >sEncoding)); echo "\nsWorksheetTitle . "\">\n\n"; foreach ($this->lines as $line) echo $line; echo "\n\n"; echo $this->footer; } } ?> 15
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Tài liệu Lập trình C cho vi điều khiển
13 p | 595 | 264
-
Tài liệu lập trình Export và Import ra tập tin text từ Access (VB)
79 p | 277 | 100
-
Lập trình cơ sở dữ liệu Visual Basic SQL server part 1
50 p | 257 | 91
-
Tài liệu Lập trình C# tiếng Việt
212 p | 341 | 74
-
Tài liệu lập trình C++ tiếng Việt
200 p | 295 | 74
-
Tài Liệu lập trình - Chuyên Đề 2 Lệnh cấu hình cơ bản
13 p | 210 | 68
-
Tài liệu Lập trình hệ thống - NGẮT VÀ SỰ KIỆN
15 p | 279 | 66
-
Lập trình cơ sở dữ liệu Visual Basic SQL server part 2
50 p | 178 | 64
-
Lập trình cơ sở dữ liệu Visual Basic SQL server part 4
50 p | 167 | 52
-
Lập trình cơ sở dữ liệu Visual Basic SQL server part 3
50 p | 156 | 52
-
Lập trình cơ sở dữ liệu Visual Basic SQL server part 5
50 p | 134 | 48
-
Tài liệu Lập trình C tiếng Việt
117 p | 181 | 43
-
Lập trình cơ sở dữ liệu Visual Basic SQL server part 6
50 p | 154 | 41
-
Lập trình cơ sở dữ liệu Visual Basic SQL server part 8
50 p | 117 | 41
-
Lập trình cơ sở dữ liệu Visual Basic SQL server part 10
48 p | 123 | 37
-
Lập trình cơ sở dữ liệu Visual Basic SQL server part 9
50 p | 118 | 37
-
Lập trình cơ sở dữ liệu Visual Basic SQL server part 7
50 p | 112 | 37
-
Tài liệu lập trình PHP
101 p | 164 | 31
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn