Lệnh Select từ sql rồi đưa vào datagridview

Xin chào mọi người, em đang muốn làm một thanh tìm kiếm theo tên, sau đó hiển thị kết quả tìm kiếm ra datagridview, Nó báo lỗi là: Incorect Syntax near d(kí tự nhập vào ô textbox1) ở dòng sda.Fill(dt). Em không biết cách làm này ổn chưa, hay có sai sót gì không. Nhờ các anh chị xem và chỉ giúp em, em xin cảm ơn ạ.
Code của em thế này:

SqlConnection conn = new SqlConnection("ConnectionString");
        private void button3_Click(object sender, EventArgs e)
        {
            SqlDataAdapter sda = new SqlDataAdapter(@"SELECT NAME FROM BASIC_INFO 
                                                      WHERE NAME LIKE('%'" + textBox1.Text + "'%')", conn);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            dataGridView1.Rows.Clear();
            dataGridView1.DataSource = dt;
        }

DataTable(dt) của bạn đang là empty sao mà có dữ liệu được.

Nó chưa có dữ liệu mà, em tạo một cái DataTable rỗng rồi mới copy vào. (sda.Fill(dt)). Em có làm một cái Display_data vào datagirdview thế này, và nó chạy được, em chỉ sửa lại lệnh Sql command thôi thì nó lại lỗi:

DataSet ds = new DataSet();

thử dùng cái này để fill thay vì dataTable xem

Nó vẫn bị lỗi y hệt luôn á anh

private void button3_Click(object sender, EventArgs e)
        {
            SqlDataAdapter sda = new SqlDataAdapter(@"SELECT NAME FROM BASIC_INFO 
                                                      WHERE NAME LIKE('%'" + textBox1.Text + "'%')", conn);
            //DataTable dt = new DataTable();
            //sda.Fill(dt);
            DataSet ds = new DataSet();
            sda.Fill(ds);
            dataGridView1.Rows.Clear();
            dataGridView1.DataSource = ds;
            //foreach (DataRow item in dt.Rows)
            //{
            //    int n = dataGridView1.Rows.Add();
            //    dataGridView1.Rows[n].Cells[0].Value = item[0].ToString();
            //}
        }

Xem ví dụ này có thể giúp bạn nha.
Bạn kiểm tra connection đã open chưa

Không được anh ơi, em không thể tìm ra lỗi, nó sai từ dòng sda.Fill() rồi :(. Em đã kiểm tra lại connection rồi, nó vẫn chạy ổn. Em còn chạy thử vài lệnh bên này:


Em còn test luôn cái display_data hồi nãy nữa. Vẫn không ăn thua :frowning:

thử show log error mình xem sao bạn


Đây ạ, em không kéo cái Form đi chỗ khác được.

Em sai ở chỗ dấu nháy ’ trong câu lệnh:

 SqlDataAdapter sda = new SqlDataAdapter(@"SELECT NAME FROM BASIC_INFO   
WHERE NAME LIKE('%" + textBox1.Text + "%')", conn);

Em muốn hỏi rằng tại sao dùng SqlDataAdapter lại không cần dùng

conn.Open();
conn.Close();
1 Like

do connection của bạn đang open sẵn rồi nên k dùng conn.open() thì nó vẫn query dc. Tui nhiên nếu nhiều connect tới db của bạn sẽ gây ra một số phát sinh k mong muốn như treo hệ thống vì các connect k đc đóng mà cứ tăng dần, vì vậy cứ truy cập tới db thì open sử dụng xong thì close để tối ưu hệ thống.

4 Likes

Wow, thì ra là như vậy, em cảm ơn anh nhiều lắm, em còn có 1 vấn đề là:
khi muốn xóa hết các dòng của datagridview, em thấy người ta chỉ 3 cách cơ bản:

datagridview.DataSource = null; 
dataGridView1.Rows.Clear();
dataGridView1.Refresh();

Cách đầu tiên có thể dùng cho trường hợp connection của em, nhưng nếu trả về null thì nó có bị leak bộ nhớ giống như bên c++ không ạ.

C# có cơ chế tự thu gom và giải phóng bộ nhớ (garbage collector). Cách nào cũng ổn thôi.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?