acces den datatableye parametre ile veri transfer

mfyildiz88
14-10-2018, 22:07   |  #1  
mfyildiz88 avatarı
OP Taze Üye
Teşekkür Sayısı: 0
2 mesaj
Kayıt Tarihi:Kayıt: Eki 2018

Merhaba,
Aşağıdaki kod "acces" 'den  "acces" 'e parametre ile  veri transferidir. Daha sonra mükerrer satırlar silinmektedir."acces" 'den "datatable" ye aşağıdaki koddaki gibi parametre ile veri transferi nasıl yapılır. Çünkü 20 satırdan fazla verilerde işlem çok uzun sürüyor.

void start()
{
emptyperiodadd();
dublicatedrowclean();
}


void emptyperiodadd()
        {
            for (int i = 0; i < dataGridView1.RowCount; i++)
            {
                if (faturagrid.Rows != null && dataGridView1.Rows.Cells[1].Value != null)
                {
                    DateTime d = DateTime.Parse(faturagrid.Rows.Cells[1].Value.ToString());
                    InsertRow(d.ToString("dd.MM.yyyy"));    }
            }
        }

        void InsertRow(string cell)
        {
            DateTime month;
            string ncell = cell.Replace('.', '-');
            if (DateTime.TryParseExact(ncell, "dd-MM-yyyy", null, DateTimeStyles.None, out month))
            {
                InsertMonth(month.AddMonths(-1));
                InsertMonth(month);
            }
        }

      
        void InsertMonth(DateTime month)
        {
            using (var conn = new OleDbConnection("Provider=" + "Microsoft.Jet.OLEDB.4.0"  + "; Data Source=" + tempyol))
            using (var cmd1 = conn.CreateCommand())

            {
                cmd1.Connection.Open();
                cmd1.CommandText = "insert into kdv (a) values (?)";
                cmd1.Parameters.AddWithValue("?", month.ToString("MM/yyyy").Replace('.', '/'));
                cmd1.ExecuteNonQuery();
            }

int kdvsil1, kdvsil2;

        private void dublicatedrowclean()
        {
            OleDbConnection con = new OleDbConnection("Provider=" + "Microsoft.Jet.OLEDB.4.0" + "; Data Source=" + tempyol);
            DataSet ds = new DataSet();
            OleDbDataAdapter da = new OleDbDataAdapter("select * from kdv", con);
            con.Open();
            da.Fill(ds, "kdv");
            for (int i = 0; i < ds.Tables["kdv"].Rows.Count; i++)
            {
                DataRow row = ds.Tables["kdv"].Rows;
                kdvsil2++;
                for (int j = kdvsil2; j < ds.Tables["kdv"].Rows.Count; j++)
                {
                    DataRow row2 = ds.Tables["kdv"].Rows[j];
                    if (row.ItemArray.GetValue(1).ToString() == row2.ItemArray.GetValue(1).ToString())
                    {
                        if (row.ItemArray.GetValue(3).ToString() == row2.ItemArray.GetValue(3).ToString())
                        {
                            kdvsil1 = int.Parse(row2.ItemArray.GetValue(0).ToString());
                            kdvsila(kdvsil1);
                        }
                    }
                }
            }
            con.Close();
        }


        private void kdvsila(int num)
        {

            OleDbConnection con = new OleDbConnection("Provider=" + "Microsoft.Jet.OLEDB.4.0" + "; Data Source=" + tempyol);
            con.Open();
            OleDbCommand c = new OleDbCommand("Delete from kdv where ID =?", con);
            c.Parameters.AddWithValue("ID", num);
            c.ExecuteNonQuery();
            con.Close();
        }

White-Fox
15-10-2018, 10:12   |  #2  
White-Fox avatarı
Yıllanmış Üye
Teşekkür Sayısı: 155
1,104 mesaj
Kayıt Tarihi:Kayıt: Eyl 2010

Yukarıda ki kodlarda ,

1-datagridin üzerinde dönüp veritabanına kaydetmeye çalışıyorsun bu yanlış , datagridin datasource üne bir binding source yada observable nesne yada en azından bir liste ataman daha doğru olur.Datagridler senin verini tutmak için dizayn edilmiş araçlar değil , datagridler sen arka planda işini yaparken , yaptıklarını yansıtmakla yükümlü tutulmalı sadece.

2-Access kullanma , onu veritabanından bile saymıyorum.Sayanın da aklına şaşarım.Access yerine SQLite  , LiteDB vb. binlerce veritabanı var.Gözünü kapat ve bir veritabanı seç , accessden iyimi diye açıp bakmaya bile gerek duymam :)

mfyildiz88
21-10-2018, 17:24   |  #3  
OP Taze Üye
Teşekkür Sayısı: 0
2 mesaj
Kayıt Tarihi:Kayıt: Eki 2018

sql lite a geçtim %50 perofrans kazandım