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.

Cevap Geçmişi

29.04.17 02:47
Bunu SqlBulkCopy kullanarak tablo varsa ekleme işini halletmek çok kolay. Ancak tablo yoksa yeni oluşturması işi biraz uzun. Altta şuradan ve şuradan alıp birleştirdiğim ve küçük bazı düzenlemeler yaptığım bir örnek var. Ben test ettim. Gayet güzel çalışıyor. public static void DataTableKopyala(DataTable dt, string tableName, SqlConnection conn) { // Tablo var mı bak. SqlCommand cmd = new SqlCommand("SELECT * FROM sysobjects where name = '" + tableName + "'", conn); bool tabloVar = cmd.ExecuteScalar() != null; // Tablo yoksa oluştur. if (!tabloVar) { string cmdText = CreateTableSQL(tableName, dt); SqlCommand ct = new SqlCommand(cmdText, conn); ct.ExecuteNonQuery(); } using (var bulkCopy = new SqlBulkCopy(conn.ConnectionString, SqlBulkCopyOptions.KeepIdentity)) { foreach (DataColumn col in dt.Columns) { bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName); } bulkCopy.BulkCopyTimeout = 600; bulkCopy.DestinationTableName = tableName; bulkCopy.WriteToServer(dt); } } // DataTable nesnesine göre bir SQL sorgusu oluşturur. public static string CreateTableSQL(string tableName, DataTable table) { string sqlsc; sqlsc = "CREATE TABLE " + tableName + " ("; for (int i = 0; i < table.Columns.Count; i++) { sqlsc += "\n [" + table.Columns[i].ColumnName + "] "; string columnType = table.Columns[i].DataType.ToString(); switch (columnType) { case "System.Int32": sqlsc += " int "; break; case "System.Int64": sqlsc += " bigint "; break; case "System.Int16": sqlsc += " smallint"; break; case "System.Byte": sqlsc += " tinyint"; break; case "System.Decimal": sqlsc += " decimal "; break; case "System.DateTime": sqlsc += " datetime "; break; case "System.String": default: sqlsc += string.Format(" nvarchar({0}) ", table.Columns[i].MaxLength == -1 ? "max" : table.Columns[i].MaxLength.ToString()); break; } if (table.Columns[i].AutoIncrement) sqlsc += " IDENTITY(" + table.Columns[i].AutoIncrementSeed.ToString() + "," + table.Columns[i].AutoIncrementStep.ToString() + ") "; if (!table.Columns[i].AllowDBNull) sqlsc += " NOT NULL "; sqlsc += ","; } return sqlsc.Substring(0, sqlsc.Length - 1) + "\n)"; } Örnek kullanım: // Bir DataTable oluştur. DataTable dt = new DataTable(); dt.Clear(); // Bazı alanlar ekle. dt.Columns.Add("Adi"); dt.Columns.Add("Soyadi"); dt.Columns.Add("Meslegi"); // Bir kayıt ekle. DataRow dr = dt.NewRow(); dr[0] = "Mehmet"; dr[1] = "Emre"; dr[2] = "Öğretmen"; dt.Rows.Add(dr); // Bir kayıt daha ekle dr = dt.NewRow(); dr[0] = "Rüştü"; dr[1] = "Keskintepe"; dr[2] = "Emekli"; dt.Rows.Add(dr); // Bağlantı oluştur va aç. string connectionString = @"Data Source...(Buraya bağlantı dizenizi yazın)"; SqlConnection conn = new SqlConnection(connectionString); conn.Open(); // DataTable kayıtlarını veritabanına yaz. DataTableKopyala(dt, "Kisiler", conn); conn.Close();
Ekleyen: cevapsitesi
Değiştiren: cevapsitesi
24.04.17 21:02
Bunu SqlBulkCopy kullanarak tablo varsa ekleme işini halletmek çok kolay. Ancak tablo yoksa yeni oluşturması işi biraz uzun. Altta şuradan ve şuradan alıp birleştirdiğim ve küçük bazı düzenlemeler yaptığım bir örnek var. Ben test ettim. Gayet güzel çalışıyor. public static void DataTableKopyala(DataTable dt, string tableName, SqlConnection conn) { // Tablo var mı bak. SqlCommand cmd = new SqlCommand("SELECT * FROM sysobjects where name = '" + tableName + "'", conn); bool tabloVar = cmd.ExecuteScalar() != null; // Tablo yoksa oluştur. if (!tabloVar) { string cmdText = CreateTABLE(tableName, dt); SqlCommand ct = new SqlCommand(cmdText, conn); ct.ExecuteNonQuery(); } using (var bulkCopy = new SqlBulkCopy(conn.ConnectionString, SqlBulkCopyOptions.KeepIdentity)) { foreach (DataColumn col in dt.Columns) { bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName); } bulkCopy.BulkCopyTimeout = 600; bulkCopy.DestinationTableName = tableName; bulkCopy.WriteToServer(dt); } } // DataTable nesnesine göre bir SQL sorgusu oluşturur. public static string CreateTABLE(string tableName, DataTable table) { string sqlsc; sqlsc = "CREATE TABLE " + tableName + " ("; for (int i = 0; i < table.Columns.Count; i++) { sqlsc += "\n [" + table.Columns[i].ColumnName + "] "; string columnType = table.Columns[i].DataType.ToString(); switch (columnType) { case "System.Int32": sqlsc += " int "; break; case "System.Int64": sqlsc += " bigint "; break; case "System.Int16": sqlsc += " smallint"; break; case "System.Byte": sqlsc += " tinyint"; break; case "System.Decimal": sqlsc += " decimal "; break; case "System.DateTime": sqlsc += " datetime "; break; case "System.String": default: sqlsc += string.Format(" nvarchar({0}) ", table.Columns[i].MaxLength == -1 ? "max" : table.Columns[i].MaxLength.ToString()); break; } if (table.Columns[i].AutoIncrement) sqlsc += " IDENTITY(" + table.Columns[i].AutoIncrementSeed.ToString() + "," + table.Columns[i].AutoIncrementStep.ToString() + ") "; if (!table.Columns[i].AllowDBNull) sqlsc += " NOT NULL "; sqlsc += ","; } return sqlsc.Substring(0, sqlsc.Length - 1) + "\n)"; } Örnek kullanım: // Bir DataTable oluştur. DataTable dt = new DataTable(); dt.Clear(); // Bazı alanlar ekle. dt.Columns.Add("Adi"); dt.Columns.Add("Soyadi"); dt.Columns.Add("Meslegi"); // Bir kayıt ekle. DataRow dr = dt.NewRow(); dr[0] = "Mehmet"; dr[1] = "Emre"; dr[2] = "Öğretmen"; dt.Rows.Add(dr); // Bir kayıt daha ekle dr = dt.NewRow(); dr[0] = "Rüştü"; dr[1] = "Keskintepe"; dr[2] = "Emekli"; dt.Rows.Add(dr); // Bağlantı oluştur va aç. string connectionString = @"Data Source...(Buraya bağlantı dizenizi yazın)"; SqlConnection conn = new SqlConnection(connectionString); conn.Open(); // DataTable kayıtlarını veritabanına yaz. DataTableKopyala(dt, "Kisiler", conn); conn.Close();
Ekleyen: cevapsitesi
Değiştiren: cevapsitesi
24.04.17 20:58
Bunu SqlBulkCopy kullanarak tablo varsa ekleme işini halletmek çok kolay. Ancak tablo yoksa yeni oluşturması işi biraz uzun. Altta şuradan ve şuradan alıp birleştirdiğim ve küçük bazı düzenlemeler yaptığım bir örnek var. Ben test ettim. Gayet güzel çalışıyor. public static void DataTableKopyala(DataTable dt, string tableName, SqlConnection conn) { // Tablo var mı bak. SqlCommand cmd = new SqlCommand("SELECT * FROM sysobjects where name = '" + tableName + "'", conn); bool tabloVar = cmd.ExecuteScalar() != null; // Tablo yoksa oluştur. if (!tabloVar) { string cmdText = CreateTABLE(tableName, dt); SqlCommand ct = new SqlCommand(cmdText, conn); ct.ExecuteNonQuery(); } using (var bulkCopy = new SqlBulkCopy(conn.ConnectionString, SqlBulkCopyOptions.KeepIdentity)) { foreach (DataColumn col in dt.Columns) { bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName); } bulkCopy.BulkCopyTimeout = 600; bulkCopy.DestinationTableName = tableName; bulkCopy.WriteToServer(dt); } } // DataTable nesnesine göre bir SQL sorgusu oluşturur. public static string CreateTABLE(string tableName, DataTable table) { string sqlsc; sqlsc = "CREATE TABLE " + tableName + " ("; for (int i = 0; i < table.Columns.Count; i++) { sqlsc += "\n [" + table.Columns[i].ColumnName + "] "; string columnType = table.Columns[i].DataType.ToString(); switch (columnType) { case "System.Int32": sqlsc += " int "; break; case "System.Int64": sqlsc += " bigint "; break; case "System.Int16": sqlsc += " smallint"; break; case "System.Byte": sqlsc += " tinyint"; break; case "System.Decimal": sqlsc += " decimal "; break; case "System.DateTime": sqlsc += " datetime "; break; case "System.String": default: sqlsc += string.Format(" nvarchar({0}) ", table.Columns[i].MaxLength == -1 ? "max" : table.Columns[i].MaxLength.ToString()); break; } if (table.Columns[i].AutoIncrement) sqlsc += " IDENTITY(" + table.Columns[i].AutoIncrementSeed.ToString() + "," + table.Columns[i].AutoIncrementStep.ToString() + ") "; if (!table.Columns[i].AllowDBNull) sqlsc += " NOT NULL "; sqlsc += ","; } return sqlsc.Substring(0, sqlsc.Length - 1) + "\n)"; } Örnek kullanım: // Bir DataTable oluştur. DataTable dt = new DataTable(); dt.Clear(); // Bazı alanlar ekle. dt.Columns.Add("Adi"); dt.Columns.Add("Soyadi"); dt.Columns.Add("Meslegi"); // Bir kayıt ekle. DataRow dr = dt.NewRow(); dr[0] = "Mehmet"; dr[1] = "Emre"; dr[2] = "Öğretmen"; dt.Rows.Add(dr); // Bir kayıt data ekle dr = dt.NewRow(); dr[0] = "Rüştü"; dr[1] = "Keskintepe"; dr[2] = "Emekli"; dt.Rows.Add(dr); // Bağlantı oluştur va aç. string connectionString = @"Data Source..."; SqlConnection conn = new SqlConnection(connectionString); conn.Open(); // DataTable'yi veritabanına yaz. DataTableKopyala(dt, "Deneme", conn); conn.Close();
Ekleyen: cevapsitesi
Değiştiren: cevapsitesi
24.04.17 17:57
Bunu SqlBulkCopy kullanarak tablo varsa ekleme işini halletmek çok kolay. Ancak tablo yoksa yeni oluşturması işi biraz uzun. Altta şuradan ve şuradan alıp birleştirdiğim ve küçük bazı düzenlemeler yaptığım bir örnek var. Ben test ettim. Gayet güzel çalışıyor. void DataTableKopyala(DataTable dt, string tableName, SqlConnection conn) { // Tablo var mı bak. SqlCommand cmd = new SqlCommand("SELECT * FROM sysobjects where name = '" + tableName + "'", conn); bool tabloVar = cmd.ExecuteScalar() != null; // Tablo yoksa oluştur. if (!tabloVar) { string cmdText = CreateTABLE(tableName, dt); SqlCommand ct = new SqlCommand(cmdText, conn); ct.ExecuteNonQuery(); } using (var bulkCopy = new SqlBulkCopy(conn.ConnectionString, SqlBulkCopyOptions.KeepIdentity)) { foreach (DataColumn col in dt.Columns) { bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName); } bulkCopy.BulkCopyTimeout = 600; bulkCopy.DestinationTableName = tableName; bulkCopy.WriteToServer(dt); } } // DataTable nesnesine göre bir SQL sorgusu oluşturur. public static string CreateTABLE(string tableName, DataTable table) { string sqlsc; sqlsc = "CREATE TABLE " + tableName + " ("; for (int i = 0; i < table.Columns.Count; i++) { sqlsc += "\n [" + table.Columns[i].ColumnName + "] "; string columnType = table.Columns[i].DataType.ToString(); switch (columnType) { case "System.Int32": sqlsc += " int "; break; case "System.Int64": sqlsc += " bigint "; break; case "System.Int16": sqlsc += " smallint"; break; case "System.Byte": sqlsc += " tinyint"; break; case "System.Decimal": sqlsc += " decimal "; break; case "System.DateTime": sqlsc += " datetime "; break; case "System.String": default: sqlsc += string.Format(" nvarchar({0}) ", table.Columns[i].MaxLength == -1 ? "max" : table.Columns[i].MaxLength.ToString()); break; } if (table.Columns[i].AutoIncrement) sqlsc += " IDENTITY(" + table.Columns[i].AutoIncrementSeed.ToString() + "," + table.Columns[i].AutoIncrementStep.ToString() + ") "; if (!table.Columns[i].AllowDBNull) sqlsc += " NOT NULL "; sqlsc += ","; } return sqlsc.Substring(0, sqlsc.Length - 1) + "\n)"; } Örnek kullanım: // Bir DataTable oluştur. DataTable dt = new DataTable(); dt.Clear(); // Bazı alanlar ekle. dt.Columns.Add("Adi"); dt.Columns.Add("Soyadi"); dt.Columns.Add("Meslegi"); // Bir kayıt ekle. DataRow dr = dt.NewRow(); dr[0] = "Mehmet"; dr[1] = "Emre"; dr[2] = "Öğretmen"; dt.Rows.Add(dr); // Bir kayıt data ekle dr = dt.NewRow(); dr[0] = "Rüştü"; dr[1] = "Keskintepe"; dr[2] = "Emekli"; dt.Rows.Add(dr); // Bağlantı oluştur va aç. string connectionString = @"Data Source..."; SqlConnection conn = new SqlConnection(connectionString); conn.Open(); // DataTable'yi veritabanına yaz. DataTableKopyala(dt, "Deneme", conn); conn.Close();
Ekleyen: cevapsitesi

En fazla 3 eski durum gösterilir.