Bạn không thể chuyển tên bảng làm tham số. Bạn phải sử dụng SQL động để thực hiện việc này, vì vậy bạn phải tập trung chuỗi để làm điều đó, chẳng hạn như
MySqlCommand cmd = new MySqlCommand(String.Format("select * from {0}",tableName), cn)
Nhưng vì người dùng nhập tên tableName, do đó có thể đưa vào SQL. Bạn có thể sử dụng SQL này để xác định xem bảng đó có tồn tại hay không trước khi truy vấn bất cứ điều gì từ nó:
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'tablename';
(Bạn hoàn toàn có thể tham số hóa truy vấn này, vì vậy việc chèn SQL sẽ bị loại bỏ)
Nói chung, hãy cẩn thận với SQL injection. Nhưng nếu bạn sử dụng nội bộ này (không hiển thị với người dùng), thì việc chèn SQL sẽ không thành vấn đề.
Tốt hơn, bạn có thể xây dựng một thủ tục được lưu trữ để giải quyết vấn đề này, như trong một câu trả lời khác của tôi:
Trình thu thập SQL hợp nhất với LINQ