Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 11
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    KO THÊM VÀO CSDL được Từ GRIDVIEW?

    Mình có đoạn code này :

    Mã:
    try
                {
                    conn.Open();
                    SqlCommand command;
                    string INSERT = @"INSERT INTO LOAISP(MALSP,TENLOAI,MOTA) VALUES (@malsp,@tenlsp, @mota)";
                    command = new SqlCommand(INSERT, conn);
                    SqlDataAdapter da = new SqlDataAdapter(command);
                    DataTable dt = new DataTable();
                    command.Parameters.Add("@malsp", SqlDbType.Char, 20,"MALSP");
                    command.Parameters.Add("@tenlsp", SqlDbType.NVarChar, 100, "TENLOAI");
                    command.Parameters.Add("@mota", SqlDbType.NVarChar, 500, "MOTA");
                    da.InsertCommand = command;
                    int i = command.ExecuteNonQuery();
                    if (i > 0)
                    {
                        da.Update(dt);
                        
                    }
                        
                    conn.Close();
                }
                catch (Exception ex) { MessageBox.Show("" + ex.Message); }
    Mình ko Insert được vào CSDL , nó báo lỗi là @malsp not supplier ?? Thanks

  2. #2
    Trích dẫn Gửi bởi nguyenletri
    Mình có đoạn code này :

    Mã:
    try
                {
                    conn.Open();
                    SqlCommand command;
                    string INSERT = @"INSERT INTO LOAISP(MALSP,TENLOAI,MOTA) VALUES (@malsp,@tenlsp, @mota)";
                    command = new SqlCommand(INSERT, conn);
                    SqlDataAdapter da = new SqlDataAdapter(command);
                    DataTable dt = new DataTable();
                    command.Parameters.Add("@malsp", SqlDbType.Char, 20,"MALSP");
                    command.Parameters.Add("@tenlsp", SqlDbType.NVarChar, 100, "TENLOAI");
                    command.Parameters.Add("@mota", SqlDbType.NVarChar, 500, "MOTA");
                    (Đưa nó xuống đây)
                    da.InsertCommand = command;
                    int i = command.ExecuteNonQuery();
                    if (i > 0)
                    {
                        da.Update(dt);
                        
                    }
                        
                    conn.Close();
                }
                catch (Exception ex) { MessageBox.Show("" + ex.Message); }
    Mình ko Insert được vào CSDL , nó báo lỗi là @malsp not supplier ?? Thanks
    Bạn khởi tạo các biến Sql sau khi đã khai báo câu lệnh Sql là không được. Trước hết phải khởi tạo các biến Sql, sau đó mới khởi tạo câu lệnh Sql.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    @nguyenletri: Bạn phải xác định rõ lỗi từ dòng nào, thông báo lỗi cụ thể, đừng nói là ngay cả cách debug đơn giản mà bạn cũng chưa biết. Bạn coi lại có phải lỗi từ đây ko:


    SqlDataAdapter da = new SqlDataAdapter(command);
    @iamonlining: Sửa lỗi phải cẩn thận đừng tạo ra lỗi mới.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Cách "insert" của bạn hơi lạ. Mình không biết cách đó đúng hay sai, nhưng khi dùng SqlDataAdapter thì mình không gọi SqlCommand.Insert (hay Select, Delete, Update) thẳng như bạn, mà dùng SqlDataAdapter.Fill() để đưa dữ liệu vào DataTable, hay SqlDataAdapter.Update() để "insert", "delete" hay "update" dữ liệu trong CSDL dựa theo những gì bạn đã làm trong DataTable.

    Theo mình đoán bạn bị lỗi khi gọi da.Update(dt). Nếu bạn không gọi da.Update(dt) có lẽ Insert sẽ thành công vì bạn chỉ dùng SqlCommand thông thường.

    Cái lỗi khi gọi da.Update(dt) là do bạn tạo cái DataTable (dt), nhưng không xác định columns của DataTable. Khi bạn gọi da.Update(dt), như mình đã nói trên, thì SqlDataAdapter sẽ xét DataTable của bạn để coi record nào cần phải "insert", "delete" hay "update" trong CSDL. Cho dù DataTable không có dừ liệu nào, SqlDataAdapter vẫn cần phải phải "map" @malsp vào column "malsp", @tenlsp vào "tenlsp", và @mota vào "mota".

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình INSERT chỉ đơn giản thế này:


    Mã:
    string SQLtxt = "INSERT INTO tbName (column1, column2, column3, ..., columnn) VALUES (column1.Value, column2.Value, column3.Value, ..., columnn.Value)";conn.Open();SqlCommand cmd = new SqlCommand(SQLtxt, conn);cmd.ExecuteNonQuery();conn.Close();
    Cùi nhưng vẫn ok bạn à!

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi iamonlining
    Bạn khởi tạo các biến Sql sau khi đã khai báo câu lệnh Sql là không được
    Theo mình, trước sau đều đc hết bạn à!

    - Mình toàn khai báo các biến Sql sau:

    Trích dẫn Gửi bởi trungnv
    Mã:
    string SQLtxt = "INSERT INTO tbName (column1, column2, column3, ..., columnn) VALUES (column1.Value, column2.Value, column3.Value, ..., columnn.Value)";conn.Open();SqlCommand cmd = new SqlCommand(SQLtxt, conn);// Saucmd.ExecuteNonQuery();conn.Close();
    - Còn C# cho phép thế này:


    Mã:
    SqlCommand cmd = new SqlCommand();// Trướccmd.CommandText = "INSERT INTO tbName (column1, column2, column3, ..., columnn) VALUES (column1.Value, column2.Value, column3.Value, ..., columnn.Value)";

  7. #7
    Trích dẫn Gửi bởi trungnv
    Theo mình, trước sau đều đc hết bạn à!

    - Mình toàn khai báo các biến Sql sau:



    - Còn C# cho phép thế này:


    Mã:
    SqlCommand cmd = new SqlCommand();// Trướccmd.CommandText = "INSERT INTO tbName (column1, column2, column3, ..., columnn) VALUES (column1.Value, column2.Value, column3.Value, ..., columnn.Value)";
    Đây là bạn INSERT giá trị trực tiếp chứ đâu có dùng biến. Bạn thử xem đi, bất kỳ biến nào khởi tạo sau khi đã khai báo câu lệnh SqlCommand thì đều được báo lỗi là "not supplier".

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn thử sửa code lại như sau

    Mã:
    ...
    string updateQuery = @"Update LOAISP set MALSP=@malsp, TENLOAI=@tenloai, MOTA=@mota WHERE MALSP=@old_malsp";
    
    ...
    command.Parameters.Add("@malsp", SqlDbType.Char, 20, "MÃ LSP");
    command.Parameters.Add("@tenloai", SqlDbType.NVarChar, 100, "TÊN LOẠI");
    command.Parameters.Add("@mota", SqlDbType.NVarChar, 500, "MÔ TẢ");
    SqlParameter param = command.Parameters.Add("@old_malsp", SqlDbType.Char, 20, "MÃ LSP");
    param.SourceVersion = DataRowVersion.Original;
    
    ...

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình thì chả bao giờ dùng dataset, adapter..., toàn truy vấn thẳng vào datasource luôn rồi lại cho Gridview Refresh lại, như vậy rất đơn giản nhưng ko biết nó có ảnh hưởng gì ko

  10. #10
    Thanks so much, đúng ý mình vậy mà nghĩ ko ra [IMG]images/smilies/applause.gif[/IMG]

 

 
Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •