Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 20 kết quả

Đề tài: lưu dữ liệu từ datagrid vào database bị lỗi

  1. #1
    Ngày gia nhập
    08 2011
    Bài viết
    38

    Mặc định lưu dữ liệu từ datagrid vào database bị lỗi

    Chào cả nhà, nhờ bạn Hùng huuhung đã giúp mình sửa xong phần cập nhật dữ liệu từ textbox vào datagrid rồi, nhưng mình làm chức năng lưu dữ liệu từ datagrid vào database thì bị dính lỗi này, mong mọi người chỉ giáo.

    Code:
    private void btnLuu_Click(object sender, EventArgs e)
            {
                try
                {
                    this._conection = new SqlConnection(this._conectionString);
                    this._conection.Open();
                    string Add = "INSERT INTO TblBaoCaoTuan (nguoidungId, ngayBCTu, noidungBCTu, hoanthanhBCTu) VALUES ('" + txtNguoiDung.Text + "', '" + DateTime.Now + "', '" + txtNoiDungBCTu.Text + "', '" + Convert.ToInt32(txtHoanThanh.Text) + "')";
    // bị lỗi DateTime.Now và Convert.ToInt32(txtHoanThanh.Text)  không thể là kiểu string để hợp lệ câu lệnh này được
    //nhưng do trong table mình khai kiểu của 2 cột này là datetime và kiểu int rồi
    //giờ làm sao để thực hiện được lệnh cmd.CommandText = Add; hợp lệ đây??
    
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = this._conection;
                    cmd.CommandText = Add;
                    cmd.ExecuteNonQuery();
                    this._conection.Dispose();
                    this._conection.Close();
    }
    catch (Exception databaseException)
                {
                    MessageBox.Show(databaseException.Message);
                }
            }

  2. #2
    Ngày gia nhập
    06 2011
    Bài viết
    277

    cái DateTime.Now đó nó lấy giá Trị là "dd/MM/yyyy" đúng ko???
    Vậy bạn phải format nó lại thành kiểu "MM/dd/yyyy" thì mới lưu vào bên SQL đc.

    Còn cái convert.int32 đó thì mình ko thấy dữ liệu bạn cho vào thế nào nên ko giúp bạn đc....

  3. #3
    Ngày gia nhập
    08 2011
    Bài viết
    38

    Trích dẫn Nguyên bản được gửi bởi linhgl88 Xem bài viết
    cái DateTime.Now đó nó lấy giá Trị là "dd/MM/yyyy" đúng ko???
    Vậy bạn phải format nó lại thành kiểu "MM/dd/yyyy" thì mới lưu vào bên SQL đc.

    Còn cái convert.int32 đó thì mình ko thấy dữ liệu bạn cho vào thế nào nên ko giúp bạn đc....
    Dữ liệu cho vào của txtHoanThanh là một textbox bạn àh, kiểu lưu trong table là int
    Zậy thì lỗi chổ nào zậy mọi người??
    Ai có thời gian thì giúp mình qua teamview thì tốt quá nha.
    Nick yahoo của mình bên dưới nha yahoo: nguyentau84

  4. #4
    Ngày gia nhập
    06 2011
    Bài viết
    277

    Trích dẫn Nguyên bản được gửi bởi philipdn Xem bài viết
    Dữ liệu cho vào của txtHoanThanh là một textbox bạn àh, kiểu lưu trong table là int
    Zậy thì lỗi chổ nào zậy mọi người??
    Ai có thời gian thì giúp mình qua teamview thì tốt quá nha.
    Nick yahoo của mình bên dưới nha yahoo: nguyentau84
    ý là dữ liệu bạn nhập vào đó!!!

    Là số thực, số thập phân hay số nguyên ... hay là ký tự chữ cái!!!

    Như 30 hay 30.0 ....

    Nếu là 30.0 thì nó ko chuyển đc là đúng rùi. Vì nó ko hiểu dấu "."

  5. #5
    Ngày gia nhập
    08 2011
    Bài viết
    38

    Trích dẫn Nguyên bản được gửi bởi linhgl88 Xem bài viết
    ý là dữ liệu bạn nhập vào đó!!!

    Là số thực, số thập phân hay số nguyên ... hay là ký tự chữ cái!!!

    Như 30 hay 30.0 ....

    Nếu là 30.0 thì nó ko chuyển đc là đúng rùi. Vì nó ko hiểu dấu "."
    Kiểu khai báo trong table là int, nhưng mình nhập vào đó theo mọi kiểu để thử như ý của bạn vẫn ko được.
    Bạn có thể share nick chat cho mình được ko?
    Thanks
    C# một phần tất yếu của cuộc sống
    Cà phê xem phim 3D Đà Nẵng - http://3dsmartcoffee.com.vn
    <@ Bản đồ dẫn đường - Click here @>

  6. #6
    Ngày gia nhập
    12 2010
    Bài viết
    683

    Mặc định lưu dữ liệu từ datagrid vào database bị lỗi

    DateTime.Now.Tostring("") Format đi

    Mà cái DateTime trong DB của bạn là String hả??

    Còn đã convert qua Int32 rồi mà bỏ vô dấu "'" là sao??

  7. #7
    Ngày gia nhập
    08 2011
    Bài viết
    38

    Trích dẫn Nguyên bản được gửi bởi cchangkhongayngo Xem bài viết
    DateTime.Now.Tostring("") Format đi

    Mà cái DateTime trong DB của bạn là String hả??

    Còn đã convert qua Int32 rồi mà bỏ vô dấu "'" là sao??
    Hic, mình đã thử đủ mọi cách mấy bạn bày cũng chịu thua.
    Tức quá mình làm cái project mới để ví dụ về cái đưa dữ liệu từ database ra datagrid và datagrid nhận giá trị từ textbox và cuối cùng là lưu ngược dữ liệu mới nhập này vào lại database, nhưng kêt quả vẫn y trên, tức datagrid vẫn load được dữ liệu từ database và datagrid nhận được dữ liệu từ textbox nhập vào khi nhấn nút Add, nhưng trong database vẫn ko lưu được giá trị mới nhập này , hic
    Đây là code project ví dụ mới của mình:
    Code:
    private void btnAdd_Click(object sender, EventArgs e)
            {
    
                if (txtMaSP.Text != "" || txtTenSP.Text != "" || txtGiaSP.Text != "" || txtLoaiSP.Text != "")
                {
                    int indexRow = dtgQLSanPham.RowCount + 2;
                    DataRow row = _dataTable.NewRow();
                    row["Id"] = indexRow;
                    row["Mã SP"] = txtMaSP.Text;
                    row["Tên SP"] = txtTenSP.Text;
                    row["Loại SP"] = txtLoaiSP.Text;
                    row["Giá SP"] = Convert.ToInt32(txtGiaSP.Text);
    
                    this._dataTable.Rows.Add(row);
                    dtgQLSanPham.DataSource = this._dataTable;
    
    
                    //Lưu dữ liệu vào Database
                    this._conection = new SqlConnection(this.connectionString);
                    this._conection.Open();
                    string Add = "INSERT INTO dbo.TblSanPham (MaSP, TenSP, GiaSP, LoaiSP, SoLuongNhap) VALUES ('" + txtMaSP.Text + "', '" + txtTenSP.Text + "', ' + Int32.Parse(txtGiaSP.Text) + ', '" + txtLoaiSP.Text + "', ' + Int32.Parse(txtSLNhap.Text) + ')";
                    //string Add = "INSERT INTO TblSanPham (MaSP, TenSP, GiaSP, LoaiSP, SoLuongNhap) VALUES (N'gk2', N'toán lớp 12', 3500, N'sách giáo khoa', 15)";
    //Đã thử với String trên, ứng với các giá trị này thì làm thủ công trong New Query thì thêm vào database thành công nhưng đưa ra đây thì cũng ko thấy động tĩnh gì hết trong database
                    SqlCommand cmd = new SqlCommand(Add, this._conection);
                    cmd.ExecuteNonQuery(); //>> báo lỗi Conversion failed when converting the varchar value ' Int32.Parse(txtGiaSP.Text) ' to data type int. 
                    this._conection.Dispose();
                    this._conection.Close();
    
                    MessageBox.Show("Thêm sản phẩm thành công.", "Thong bao");
                }
                else
                {
                    MessageBox.Show("Chưa có nội dung để thêm vào.", "Thong bao");
                    txtMaSP.Focus();
                }
            }
    C# một phần tất yếu của cuộc sống
    Cà phê xem phim 3D Đà Nẵng - http://3dsmartcoffee.com.vn
    <@ Bản đồ dẫn đường - Click here @>

  8. #8
    Ngày gia nhập
    03 2011
    Nơi ở
    Huế
    Bài viết
    37

    Theo mình, khi bạn sử dụng SqlCommand thì không nên gán các tham số bằng cách cộng chuỗi như thế mà nên sử dụng SqlParamter

  9. #9
    Ngày gia nhập
    08 2011
    Nơi ở
    Hà Nội | http://ipmac.vn
    Bài viết
    198

    Trích dẫn Nguyên bản được gửi bởi philipdn Xem bài viết
    Chào cả nhà, nhờ bạn Hùng huuhung đã giúp mình sửa xong phần cập nhật dữ liệu từ textbox vào datagrid rồi, nhưng mình làm chức năng lưu dữ liệu từ datagrid vào database thì bị dính lỗi này, mong mọi người chỉ giáo.

    Code:
    private void btnLuu_Click(object sender, EventArgs e)
            {
                try
                {
                    this._conection = new SqlConnection(this._conectionString);
                    this._conection.Open();
                    string Add = "INSERT INTO TblBaoCaoTuan (nguoidungId, ngayBCTu, noidungBCTu, hoanthanhBCTu) VALUES ('" + txtNguoiDung.Text + "', '" + DateTime.Now + "', '" + txtNoiDungBCTu.Text + "', '" + Convert.ToInt32(txtHoanThanh.Text) + "')";
    // bị lỗi DateTime.Now và Convert.ToInt32(txtHoanThanh.Text)  không thể là kiểu string để hợp lệ câu lệnh này được
    //nhưng do trong table mình khai kiểu của 2 cột này là datetime và kiểu int rồi
    //giờ làm sao để thực hiện được lệnh cmd.CommandText = Add; hợp lệ đây??
    
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = this._conection;
                    cmd.CommandText = Add;
                    cmd.ExecuteNonQuery();
                    this._conection.Dispose();
                    this._conection.Close();
    }
    catch (Exception databaseException)
                {
                    MessageBox.Show(databaseException.Message);
                }
            }
    Đừng làm ghép chuỗi sql như vạy bạn à -> vừa bị sql injection vừa không đúng format của kiểu biến.
    Bạn nghiên cứu chuyển sang prepared statement đi nhé.

    Visual C# Code:
    1.         // Create the command and set its properties.
    2.         SqlCommand command = new SqlCommand();
    3.         command.Connection = connection;
    4.         command.CommandText = "INSERT INTO tblFoo VALUE(@Param1)";
    5.         command.CommandType = CommandType.StoredProcedure;
    6.  
    7.         // Add the input parameter and set its properties.
    8.         SqlParameter parameter = new SqlParameter();
    9.         parameter.ParameterName = "@Param1"; // -> tên của param nhé
    10.  
    11.  
    12.         parameter.SqlDbType = SqlDbType.NVarChar; // -> chỉ dinhd kiểu của param ở đây
    13.         parameter.Direction = ParameterDirection.Input;
    14.         parameter.Value = categoryName; // -> giá trị param vứt vào đây
    15.  
    16.         // Add the parameter to the Parameters collection.
    17.         command.Parameters.Add(parameter);
    18.  
    19.         // Open the connection and execute the reader.
    20.         connection.Open();
    21.         SqlDataReader reader = command.ExecuteReader();
    Bao chàng trai không tiếc tuổi xuân đang viết nhiều chương trình
    Em đẹp xinh cũng quyết lập công chưa muốn lấy chồng
    http://ipmac.vn/ <- Học lập trình ... sư
    http://laptrinh.tv/ <- Kênh chia sẻ video học IT
    http://www.youtube.com/user/anhnt3 <- Video thực hành lập trình... sư từ A-Z

  10. #10
    Ngày gia nhập
    03 2011
    Bài viết
    124

    Sửa
    Code:
    ' + Int32.Parse(txtGiaSP.Text) + ' và ' + Int32.Parse(txtSLNhap.Text) + '
    thành
    Code:
    " + Int32.Parse(txtGiaSP.Text) + " và " + Int32.Parse(txtSLNhap.Text) + "
    xem được ko bạn
    Chia sẻ là học hỏi

Các đề tài tương tự

  1. Database Khó khăn trong vấn đề đưa dữ liệu từ Database vào datagrid
    Gửi bởi thinhcnt50dh1 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 25-08-2013, 02:36 PM
  2. Duyệt từng row datagrid và lưu vào database
    Gửi bởi duonglg trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 21-08-2013, 09:32 PM
  3. MS SQL Lỗi Không attach được database trong sql 2005, lỗi: not able to access database under current security context
    Gửi bởi hugo158 trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 4
    Bài viết cuối: 19-04-2013, 02:51 AM
  4. ADO.NET Import Datagrid View vào Database MySQL bằng C#
    Gửi bởi cuonghenry99 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 02-12-2011, 12:52 PM
  5. Tạo datagrid kết nối database sử dụng ODBC trong MFC?
    Gửi bởi a27061990w trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 30-10-2011, 07:59 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn