none
Veritabanı kaydetme hatası RRS feed

  • Soru

  • Merhaba iyi günler ben MDI bir form yarattım verileri görüntüleyebilirim ve yahut kategorileri değiştirebilirim ama veriyi kaydettiğim zaman hata veriyor bu hatayı veriyor

    Buda hata veren form

    Bu benim Veritabanı Kütüphanesi kodları

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data.SqlClient;
    using System.Data;
    
    
    namespace DBLibrary
    {
        public class Helper
        {
            SqlConnection con;
            string conString = "Server=.;Database=HomeBook;Trusted_Connection=True;";
            DataSet ds;
            SqlDataAdapter da;
            SqlCommand cmd;
            SqlCommandBuilder scb;
    
            public Helper()
            {
                ds = new DataSet();
                con = new SqlConnection(conString);
            }
    
            public DataTable Fill(string sqlCom, string tableName)
            {
    
                da = new SqlDataAdapter(sqlCom, this.con);
                da.Fill(ds, tableName);
                return ds.Tables[tableName];
            }
    
            public DataTable Update(DataTable tbl)
            {
                scb = new SqlCommandBuilder(da);
                da.Update(tbl);
                return tbl;
            }
    
        }
    }
    

    Buda form ekleme kodları 

    using DBLibrary;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace Kitap_Yurdu
    {
        public partial class frmAddProducts : Form
        {
            public frmAddProducts()
            {
                InitializeComponent();
            }
    
            Helper h;
            DataTable tblProducts;
            DataTable tblCategories;
    
            private void frmAddProducts_Load(object sender, EventArgs e)
            {
                h = new Helper();
                tblProducts = h.Fill("SELECT * FROM Products", "Products");
                tblCategories = h.Fill("SELECT * FROM Categories", "Categories");
                cmbCategories.ValueMember = "CategoryID";
                cmbCategories.DisplayMember = "CategoryName";
                cmbCategories.DataSource = tblCategories;
                
            }
    
            private void btnAdd_Click(object sender, EventArgs e)
            {
                
                DataRow dr = tblProducts.NewRow();
                dr["ProductName"] = txtProduct.Text;
                dr["CategoryID"] = cmbCategories.SelectedValue;
                dr["StockNumber"] = txtStock.Text;
                tblProducts.Rows.Add(dr);
                h.Update(tblProducts);
    
               
            }
        }
    }
    

    19 Mart 2013 Salı 17:48

Yanıtlar

  • O tabloda CategoryName gibi bir alan olduğundan emin misin?

    Tamam. Sorumu geri alıyorum. Şu şekilde değiştirirsen hatadan kurtulursun.

    Helper h=new Helper();

    Helper v=new Helper(); DataTable tblProducts; DataTable tblCategories; private void frmAddProducts_Load(object sender, EventArgs e) { h = new Helper(); tblProducts = h.Fill("SELECT * FROM Products", "Products"); tblCategories = v.Fill("SELECT * FROM Categories", "Categories"); cmbCategories.ValueMember = "CategoryID"; cmbCategories.DisplayMember = "CategoryName"; cmbCategories.DataSource = tblCategories; }

    Nedenine gelince, sınıfı birkez oluşturuyorsun ve sınıfta sqlcommandbuilder, son datatable'ını referans alıyor.

    • Düzenleyen Aslan EModerator 19 Mart 2013 Salı 18:52
    • Yanıt Olarak İşaretleyen Zerhan 19 Mart 2013 Salı 19:03
    19 Mart 2013 Salı 18:31
    Moderatör

Tüm Yanıtlar

  •  DataRow dr = tblProducts.NewRow();
                dr["ProductName"] = txtProduct.Text;
                dr["CategoryID"] = cmbCategories.SelectedValue;
     dr["CategoryName"] = cmbCategories.Text;
    
                dr["StockNumber"] = txtStock.Text;
                tblProducts.Rows.Add(dr);
                h.Update(tblProducts);
    

    Table da CategoryName column u ile ilgili hata veriyor. Bu isimde bir kolonun var ise onu da kayıt ekleme kodunda kullanmanı tavsiye ederim.
    19 Mart 2013 Salı 18:14
  • Olmadı kardeş bu hatayı verdi

    19 Mart 2013 Salı 18:25
  • O tabloda CategoryName gibi bir alan olduğundan emin misin?

    Tamam. Sorumu geri alıyorum. Şu şekilde değiştirirsen hatadan kurtulursun.

    Helper h=new Helper();

    Helper v=new Helper(); DataTable tblProducts; DataTable tblCategories; private void frmAddProducts_Load(object sender, EventArgs e) { h = new Helper(); tblProducts = h.Fill("SELECT * FROM Products", "Products"); tblCategories = v.Fill("SELECT * FROM Categories", "Categories"); cmbCategories.ValueMember = "CategoryID"; cmbCategories.DisplayMember = "CategoryName"; cmbCategories.DataSource = tblCategories; }

    Nedenine gelince, sınıfı birkez oluşturuyorsun ve sınıfta sqlcommandbuilder, son datatable'ını referans alıyor.

    • Düzenleyen Aslan EModerator 19 Mart 2013 Salı 18:52
    • Yanıt Olarak İşaretleyen Zerhan 19 Mart 2013 Salı 19:03
    19 Mart 2013 Salı 18:31
    Moderatör
  • Bu benim veritabanım

    Kardeş bunun dışında Kategori ekle bide Güncellede var benim uygulamamda belki bu DataTable ler çakışmış olabilir mi acaba?

    Bu Kategori ekle kodları 

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using DBLibrary;
    
    namespace Kitap_Yurdu
    {
        public partial class frmAddCategory : Form
        {
            public frmAddCategory()
            {
                InitializeComponent();
            }
    
            Helper h;
            DataTable tbl;
    
            private void btnAdd_Click(object sender, EventArgs e)
            {
                DataRow dr = tbl.NewRow();
                dr["CategoryName"] = txtAddCategory.Text;
                tbl.Rows.Add(dr);
                dgVCategory.DataSource= h.Update(tbl);
                FillGrid();
            }
    
            public void FillGrid()
            {
                h = new Helper();
                tbl = h.Fill("SELECT CategoryID,CategoryName FROM Categories", "AddCategory");
                dgVCategory.DataSource = tbl;
                
            }
    
            private void frmAddCategory_Load(object sender, EventArgs e)
            {
                FillGrid();
            }
        }
    }
    

    Bu da Kategorileri güncelle kodları

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using DBLibrary;
    
    namespace Kitap_Yurdu
    {
        public partial class frmEditCategory : Form
        {
            public frmEditCategory()
            {
                InitializeComponent();
            }
    
            DataTable tbl;
            Helper h;
    
            private void btnUpdate_Click(object sender, EventArgs e)
            {      
                dgVEditCategory.DataSource = h.Update(tbl);           
            }
    
            private void frmEditCategory_Load(object sender, EventArgs e)
            {
                h = new Helper();
                tbl = h.Fill("SELECT CategoryID,CategoryName FROM Categories", "UpdateCategory");
                dgVEditCategory.DataSource = tbl;
            }
        }
    }
    

    19 Mart 2013 Salı 18:49
  • Bir üstte yazdım, yetişememişim sen yazmadan. Evet senin tabirinle çakışıyorlar.
    19 Mart 2013 Salı 18:53
    Moderatör
  • Teşekkür ederim kardeş oldu :) Yıldırım gibisin yav
    19 Mart 2013 Salı 19:03