Yazılım.
CevapSitesi.com Beta!
Çözüm Noktası
Facebook, Twitter, Google+ veya e-posta ile paylaşın.
| Sorular | Makaleler | Üyeler | Etiketler  | İletişim
Soru sormak ya da cevap vermek için;
giriş yapın veya üye olun.

Sosyal medya hesaplarınızla da giriş yapabilirsiniz.
0

datagrid üzerindeki verileri veri kaynağına kaydetmek

merhaba,

excel üzeriden veriyi datagrid üzerine atıyorum. 
OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Prg_Listesi.xlsx; Extended Properties='Excel 12.0 Xml;HDR=YES'");
baglanti.Open();  
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [Sayfa1$]", baglanti);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt.DefaultView;
baglanti.Close();
 
fakat, daha sonra datagrid deki verileri veri tabanına kaydetmeyi beceremedim. 

yardımcı olur musunuz?

teşekkürler.


Soran: 28.01.17 14:26
hakandogan
310p 32ü
yardımcı olur musunuz? →  hakandogan 29.01.17 09:52

3 Cevap

0
ben şu şekilde çözmüştüm.
            OleDbCommand komut = new OleDbCommand("SELECT * FROM [Sayfa1$]", bağlantıexcel); 
            OleDbDataReader oku = komut.ExecuteReader();
            while (oku.Read()) 
            {
                bağ.Open();
                OleDbCommand kmt = new OleDbCommand("insert into tblprg (i1,i2) values ('" + oku["i1"].ToString() + "','" + rgx.Replace(oku["i1"].ToString(),"") + "')", bağ);
                kmt.ExecuteNonQuery();
                kayitsay++;
                bağ.Close();
            }


çok teşekkür ederim.


Cevaplayan: 01.02.17 12:17
hakandogan
310p 32ü
Cevabı seçen: 15.02.17 20:45
hakandogan   310p 32ü
0
SQL Server kullansaydın işin şu kadar kolaydı:
        SqlBulkCopy sbc = new SqlBulkCopy(baglanti);
        bulkcopy.WriteToServer(dt);
 OleDb için biraz daha uzun bir yol kullanılabilir. Kısa yolunu bilmiyorum. Birisi şunu yapmış, bir dene istersen.
public static string GenerateInsert(DataTable table)
{
    var names = new List<string>();
    foreach (DataColumn col in table.Columns)
    {
        names.Add("[" + col.ColumnName + "]");
    }
    var output = new StringBuilder();
    output.AppendFormat("INSERT INTO [{0}]\n\t({1})\nVALUES ", table.TableName, string.Join(", ", names.ToArray()));
    bool firstRow = true;
    foreach (DataRow rw in table.Rows)
    {
        if (firstRow)
        {
            firstRow = false;
            output.AppendLine("");
        }
        else
        {
            // there was a previous item, so add a comma
            output.AppendLine(",");
        }
        output.Append("\t(");
        output.Append(GetInsertColumnValues(table, rw));
        output.Append(")");
    }
    return output.ToString();
}
public static string GetInsertColumnValues(DataTable table, DataRow row)
{
    var output = new StringBuilder();
    bool firstColumn = true;
    foreach (DataColumn col in table.Columns)
    {
            if (firstColumn)
            {
                firstColumn = false;
            }
            else
            {
                output.Append(", ");
            }
            output.Append(GetInsertColumnValue(row, col));
    }
    return output.ToString();
}
public static string GetInsertColumnValue(DataRow row, DataColumn column)
{
    string output = "";
    if (row[column.ColumnName] == DBNull.Value)
    {
        output = "NULL";
    }
    else
    {
        if (column.DataType == typeof(bool))
        {
            output = (bool)row[column.ColumnName] ? "1" : "0";
        }
        else
        {
            bool addQuotes = false;
            addQuotes = addQuotes || (column.DataType == typeof(string));
            addQuotes = addQuotes || (column.DataType == typeof(DateTime));
            if (addQuotes)
            {
                output = "'" + row[column.ColumnName].ToString() + "'";
            }
            else
            {
                output = row[column.ColumnName].ToString();
            }
        }
    }
    return output;
}

Kullanımı:

string SQLKodu = generateInsert(dt);
Bundan sonra SQLKodu değişkenini ile elde ettiğin sorguyu kullanarak ekleme yapabilirsin. Tabi tablonun veritabanında mevcut olması gerekir.


Cevaplayan: 31.01.17 19:27
cevapsitesi
102,034p 15ü
0
Alan adları az ve belliyse çözümün iyi. Access kullanma imkanım yok, toplu sorgu çalıştırmayı destekler mi bilmem ama, bunu şu şekilde biraz daha hızlı ve şık hale getirebiliriz.

OleDbCommand komut = new OleDbCommand("SELECT * FROM [Sayfa1$]", bağlantıexcel); 
OleDbDataReader oku = komut.ExecuteReader();
StringBuiledr sb = new StringBuilder();
while (oku.Read()) 
{
	sb.Append(String.Format("insert into tblprg (i1,i2) values ('{0}','{1}');\r\n", oku["i1"], rgx.Replace(oku["i1"].ToString(),""));
    kayitsay++;
}
bağ.Open();
OleDbCommand kmt = new OleDbCommand(sb.ToString(), bağ);
kmt.ExecuteNonQuery();
bağ.Close();



Cevaplayan: 02.02.17 10:30
cevapsitesi
102,034p 15ü