Enterprise Pattern
Transaction script, Table Model, Domain Model, Service Layer gibi Enterprise Pattern çeşitleri var. DataTable Table Model'de kullanılır.
DataTable ve DataSource
DataTable aynı zamanda bir DataSource olduğu için GUI ile kolayca birleşir.
DataTable Type Safe Değildir
Bu yüzden probleme sebep olabilir.
Nasıl Doldurulur
DataAdapter sınıflarından birisi kullanılarak doldurulur. DataTable tüm bilgiyi bellekte saklar. Çok fazla bilgi tutmasını beklemek doğru olmayabilir.
DataTable ve IList yazısına taşıdım.
DataTable ve Linq
DataTable ve Linq yazısına taşıdım.
DataTable ve DataView
DataTable DataView kullanılarak view'a dönüştürülebilir.
Transaction script, Table Model, Domain Model, Service Layer gibi Enterprise Pattern çeşitleri var. DataTable Table Model'de kullanılır.
DataTable ve DataSource
DataTable aynı zamanda bir DataSource olduğu için GUI ile kolayca birleşir.
DataTable Type Safe Değildir
Bu yüzden probleme sebep olabilir.
Nasıl Doldurulur
DataAdapter sınıflarından birisi kullanılarak doldurulur. DataTable tüm bilgiyi bellekte saklar. Çok fazla bilgi tutmasını beklemek doğru olmayabilir.
SqlConnection con = new SqlConnection(@"...");
SqlDataAdapter sda = new SqlDataAdapter("Select * From Login ", con);
DataTable dt = new DataTable();
sda.Fill(dt);
DataTable ve IListDataTable ve IList yazısına taşıdım.
DataTable ve Linq
DataTable ve Linq yazısına taşıdım.
DataTable ve DataView
DataTable DataView kullanılarak view'a dönüştürülebilir.
Constructor
Şöyle yaparız.
Açıklaması şöyle
Compute metodu
Bir sonuç nesnesi döner.
Örnek
SQL olmak zorunda değildir. Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Parametre olarak IDataReader alır. Şöyle yaparız.
DataTable nesnesine locale verilebiliyor.
Satırları dolaşmak için şöyle yaparız.
Tüm satırların sayısını almak için şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
DataTable dt = new DataTable();
AcceptChanges metoduAçıklaması şöyle
When AcceptChanges is called, any rows marked Deleted are removed from the DataTable, while any rows marked Added or Modified are marked Unchanged.
Columns Alanı
DataColumnCollection tipindendir.Bir sonuç nesnesi döner.
Örnek
SQL olmak zorunda değildir. Şöyle yaparız.
var formula = "14 + 2 * 32 / 60 + 43 - 7 + 3 - 1 + 0 * 7 + 87 - 32 / 34";
var result = new DataTable().Compute(formula, null);
Console.WriteLine(result); //returns 139.125490196078
ÖrnekŞöyle yaparız.
var object = dt.Compute("COUNT(Value)", "Value > 0");
ÖrnekŞöyle yaparız.
// Declare an object variable.
object sumObject = table.Compute("Sum(Total)", "EmpID = 5");
ÖrnekŞöyle yaparız.
// Declare an object variable.
object sumObject = table.Compute("Sum(Price)", "");
Load metoduParametre olarak IDataReader alır. Şöyle yaparız.
var dataReader = ccmd.ExecuteReader();
var dataTable = new DataTable();
dataTable.Load(dataReader);
Locale AlanıDataTable nesnesine locale verilebiliyor.
dt.Locale = CultureInfo.CurrentCulture;
Merge metodu
İki DataTable nesnesini birleştirmek için şöyle yaparız.dt1.Merge(dt2, true, MissingSchemaAction.Add);
PrimaryKey Alanı
Şöyle yaparız.
dt.PrimaryKey = new[] { dt.Columns[0], dt.Columns[1] };
RowChanged Event'i
Şöyle yaparız.
DataRowCollection tipindendir. Açıklaması şöyleŞöyle yaparız.
DataTable dt = new DataTable();
dt.RowChanged += changedRow;
Satır değişince şöyle işleriz.void changedRow(object sender, DataRowChangeEventArgs e)
{
if(e.Action == DataRowAction.Add)
e.Row[17] = e.Row[17].ToString().ToUpper();
}
Rows AlanıDataTable predates generics. DataTable.Rows is declared to return DataRowCollection, which derives from InternalDataCollectionBase. That implements the non-generic ICollection interface, which means that the compiler can't infer the type of row beyond just object.DataTable içinde her satır bir DataRow nesnesidir. Dolayısıyla şu kod derlenmez.
foreach (var row in currentTable.Rows)
{
var valueAtCurrentRow = row[0];
}
En iyi ihtimal şöyle yaparız.foreach (var row in currentTable.Rows.Cast<DataRow>())
{
var valueAtCurrentRow = row[0];
}
ÖrnekSatırları dolaşmak için şöyle yaparız.
DataTable dt=...
foreach (DataRow dr in dt.Rows) {...}
ÖrnekTüm satırların sayısını almak için şöyle yaparız.
int totalRows = dt.Rows.Count;
Geri kalan bilgileri DataRow Sınıfı yazısına taşıdım.
Select metodu
Açıklaması şöyle
ÖrnekAçıklaması şöyle
Note that the DataTable's Select() method is not the LINQ extension method, but a method that selects an array of data rows. On that array I'm using the LINQ's Select extension method.Şöyle yaparız.
var dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("val1", typeof(int));
dt.Columns.Add("val2", typeof(string));
dt.Rows.Add(1, 1, "a");
dt.Rows.Add(2, 20, "b");
dt.Rows.Add(3, 300, "c");
dt.Rows.Add(4, 4000, "d");
Console.WriteLine(string.Join("\n", dt.Select().Select(row =>
string.Format("{0}\t{1}\t{2}", row["Id"], row["val1"], row["val2"]))));
Select metodu - filterŞöyle yaparız.
var rows = dt.Select("col1 > 5");
foreach (var row in rows)
row.Delete();
Select metodu - filter + order
Örnek
Şöyle yaparız.
Bir Başka Tabloyu Klonlamak
DataTable dt = myDataset.Tables["MyTable"];
DataRow[] foundRows = dt.Select("Done > 0", "Position ASC");
DiğerBir Başka Tabloyu Klonlamak
1. Aynı veritabanında klonlama
Aynı sütunlarsa sahip iki tablo arasında veri kopyalaması şöyle yapılır.
Şöyle yapılır
Linq ile şöyle yapılabilir.
Aynı sütunlarsa sahip iki tablo arasında veri kopyalaması şöyle yapılır.
foreach (DataRow dr in dataTable1.Rows) {
if (/* some condition */)
dataTable2.Rows.Add(dr.ItemArray);
}
Bir başka yöntem ise şöyledataTable2 = dataTable1.Clone();
foreach (DataRow dr in dataTable1.Rows)
{
if (/*put some Condition */)
{
dataTable2.ImportRow(dr);
}
}
2. Bir başka veritabanına klonlamaŞöyle yapılır
string consString = "...";
using (SqlConnection con = new SqlConnection(consString))
{
using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
{
//Set the database table name
sqlBulkCopy.DestinationTableName = "[Customers]";
con.Open();
sqlBulkCopy.WriteToServer(dt);
con.Close();
}
}
İki Tabloyu BirleştirmeLinq ile şöyle yapılabilir.
var result1 = from row1 in dt1.AsEnumerable()
select new { Name = row1.Field<String>("Name"),
Color = row1.Field<String>("Color"), Price = "" };
var result2 = from row1 in dt2.AsEnumerable()
select new { Name = row1.Field<String>("Name"),
Color = "", Price = row1.Field<String>("Price") };
var res = result1.Concat(result2);
Hiç yorum yok:
Yorum Gönder