NASıL YAPıLıR: Visual C# .NET ile bir DataSet JOIN yardımcı sınıf gerçekleştir

Makale çevirileri Makale çevirileri
Makale numarası: 326080 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu adım adım makalede, uygulamak ve bir DataTable iki veya daha çok ilgili DataTable tanımlarını oluşturun ve sıralanmış ve süzülmüş kayıtları kaynak DataTable nesnelerden DataTable hedefe kopyalamak için örnek kodları içeren bir DataSetHelper sınıf nasıl kullanılacağı açıklanır.

Bunu yapmak için <a0></a0>, ortak aşağıdaki yöntemleri kullanın:
  • CreateJoinTable
  • InsertJoinInto
  • SelectJoinInto
SelectJoinInto yöntemi CreateJoinTable ve InsertJoinInto yöntemlerini çağırır. Özel yardımcı yöntemi ve veri üyeleri çözümlenmi? alan listesini saklamak için de kullanılabilir.

DataSetHelper sınıfı, bir <a0>DataSet</a0> üye değişkeni içerir. Isteğe bağlı olarak, varolan bir DataSet için DataSet üye değişkeni atayabilirsiniz. Üye değişkeni için geçerli bir DataSet gösteriyorsa, CreateJoinTable veya SelectJoinInto yöntemini oluşturduğu herhangi bir DataTable nesne DataSet eklenir. Her iki durumda da, yöntem çağrısı DataTable nesnesine bir başvuru verir. InsertJoinInto yöntemi, varolan bir hedef DataTable gerektirir ve her şeyi döndürmüyor.

DataSet nesneler hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
313485BILGI: Yol haritası için ADO.NET DataSet, DataViewManager ve DataView

Gereksinimler

Aşağıdaki listede, gereksinim duyulan donanım, yazılım, ağ altyapısı ve hizmet paketleri önerilmektedir:
  • Microsoft Windows XP, Windows 2000 veya Windows NT 4.0 Service Pack 6a
  • Microsoft Visual Studio. NET'i
Bu makalede, aşağıdaki konularda bilgi sahibi olduğunuz varsayılmaktadır:
  • Visual C# .NET sözdizimi
  • ADO.NET temelleri ve sözdizimi

DataSetHelper Kabuk sınıfı

Bu bölüm kodda olduğu tüm DataSetHelper makaleleri yöntemleri ve üye değişkenleri ekleme Kabuk sınıfı bildirir.
  1. Visual Studio .NET'i başlatın.
  2. Dosya menüsünde Yeni ' nin üzerine gelin ve sonra Project ' i tıklatın.
  3. Yeni proje) iletişim kutusunda, Project Types altında Visual C# Projects ' ı tıklatın ve Sınıf kitaplığışablonları altında tıklatın.
  4. Ad kutusuna DataSetHelper yazın.
  5. Sınıf kodu aşağıdaki kodla değiştirin:
    public class DataSetHelper
    {
        public DataSet ds;
    
        public DataSetHelper(ref DataSet DataSet)
        {
    	ds = DataSet;
        }
        public DataSetHelper()
        {
    	ds = null;
        }
    }
    					
    kurucu için iki olan aşırı içeren veya içermeyen bir DataSet geçerli bir başvuru sınıfının bir örneğini oluşturmak için kullanabilirsiniz. DataSet geçerli bir başvuru içeren bir sınıfı yöntemleri döndüren bir DataTable nesneleri de otomatik olarak DataSet eklenir.

Alan listesi ayrıştırıcı

Bu bölüm, bir <a0>alan</a0> listesinde Çözümleyicisi kodunu içerir. Böylece CreateJoinTable ve InsertJoinInto yöntemleri alan listesini yeniden ayrıştırma gerekmez çözümlenmi? yapısı kullanılır. Bu yöntemler SelectJoinInto yöntemi veya kendi kodlarınızı denir, alan listesini yeniden ayrıştırma gerekir. Ayrıştırılmış alan listesi ve ayrıştırılmamış alan listesi DataSetHelper sınıfının özel üye değişkenleri depolanır.
  1. "" bölümünde oluşturduğunuz DataSetHelper sınıfında, aşağıdaki özel sınıf tanımı eklemek:
    private class FieldInfo
    {
        public string RelationName;
        public string FieldName;	//source table field name
        public string FieldAlias;	//destination table field name
        public string Aggregate;
    }
    					
    Not: Bu sınıfın diğer DataSetHelper makaleleri için ortaktır ve bu makalede kullanmayan bazı alanlar içeriyor.

  2. Aşağıdaki özel üye değişkenleri sınıf tanımı DataSet bildirim hemen sonra ekleyin:
    private System.Collections.ArrayList m_FieldInfo; private string m_FieldList; 
    					
  3. Aşağıdaki özel yöntem, sınıf tanımı için ekleyin. Bu yöntem diğer DataSetHelper makalelerinde kullanılan yöntem aynıdır.
    private void ParseFieldList(string FieldList, bool AllowRelation)
    {
        /*
         * This code parses FieldList into FieldInfo objects  and then 
         * adds them to the m_FieldInfo private member
         * 
         * FieldList systax:  [relationname.]fieldname[ alias], ...
        */ 
        if (m_FieldList == FieldList) return;
        m_FieldInfo = new System.Collections.ArrayList();
        m_FieldList = FieldList;
        FieldInfo Field; string[] FieldParts;
        string[] Fields=FieldList.Split(',');
        int i;
        for (i=0; i<=Fields.Length-1; i++)
        {
            Field=new FieldInfo();
            //parse FieldAlias
            FieldParts = Fields[i].Trim().Split(' ');
            switch (FieldParts.Length)
            {
                case 1:
                    //to be set at the end of the loop
                    break;
                case 2:
                    Field.FieldAlias=FieldParts[1];
                    break;
                default:
                    throw new Exception("Too many spaces in field definition: '" + Fields[i] + "'.");	                        
            }
            //parse FieldName and RelationName
            FieldParts = FieldParts[0].Split('.');
            switch (FieldParts.Length)
            {
                case 1: 
                    Field.FieldName=FieldParts[0];
                    break;
                case 2:
                    if (AllowRelation==false)
                        throw new Exception("Relation specifiers not permitted in field list: '" + Fields[i] + "'.");
                    Field.RelationName = FieldParts[0].Trim();
                    Field.FieldName=FieldParts[1].Trim();
                    break;
                default:
                    throw new Exception("Invalid field definition: " + Fields[i] + "'.");
            }
            if (Field.FieldAlias==null) 
                Field.FieldAlias = Field.FieldName;
            m_FieldInfo.Add (Field);
        }
    }
    					

CreateJoinTable yöntemi

Bu bölüm CreateJoinTable yönteminin kodunu içerir.

CreateJoinTable yöntemi için bir çağrı kuralı aşağıdadır:
dt = dsHelper.CreateJoinTable("TestTable", ds.Tables["Employees"],
    "FirstName FName,LastName LName,DepartmentEmployee.DepartmentName Department");
				
Bu çağrı örnek bir TableName TestTable ve üç alan (FName LName ve Department) ile yeni bir DataTable oluşturur. Bu üç alan aynı veri ad ve soyad alanları <a0>Çalışan</a0> tablosundaki ve ana tablonun DepartmentEmployee DataRelation nesnesi üzerinden erişilen DepartmentName</a1> alanında türüne sahip.

Alan listesindeki alanları belirtmek için aşağıdaki sözdizimini kullanın:
[relationname.]fieldname[ alias], ...
				
Bu sözdizimi için aşağıdakilere dikkat edin:
  • ColumnName ve VeriTürü özellikleri DataTable hedefe kopyalanan yalnızca özellikleri var.
  • Sonuç değerlendirilmiş ifadeyi içeren alanlar için kopyalanır.
  • Bir DataTable hedef alana bir diğer ad belirterek yeniden adlandırabilirsiniz.
  • Alan listesinde bir alt kümesini farklı sırada DataTable kaynak sıraya göre listelenen alan adlarını içerir. Alan listesi boşsa, bir özel durum atılır.
  • Ana tabloları, DataRelation ilişkilendirmelisiniz. Örneğin, alan müşteriler, çalışanları ve Siparişler tablolarını birleştiren bir tablo oluşturmak isterseniz, Siparişler tablosu kaynak tablo olarak kullanmalı ve sonra müşteriler ve çalışanlar tabloları, ilişkileri aracılığıyla başvuru.
CreateJoinTable yöntemini çağırmak için <a0></a0>, "" bölümünde oluşturduğunuz DataSetHelper sınıfa aşağıdaki yöntemi ekleyin:
public DataTable CreateJoinTable(string TableName, DataTable SourceTable, string FieldList)
{
    /*
     * Creates a table based on fields of another table and related parent tables
     * 
     * FieldList syntax: [relationname.]fieldname[ alias][,[relationname.]fieldname[ alias]]...
    */ 
    if (FieldList==null)
    {
        throw new ArgumentException("You must specify at least one field in the field list.");
        //return CreateTable(TableName, SourceTable);
    }
    else
    {
        DataTable dt = new DataTable(TableName);
        ParseFieldList(FieldList, true);
        foreach(FieldInfo Field in m_FieldInfo)
        {
            if(Field.RelationName==null)
            {
                DataColumn dc = SourceTable.Columns[Field.FieldName];
                dt.Columns.Add(dc.ColumnName, dc.DataType, dc.Expression);
            }
            else
            {
                DataColumn dc = SourceTable.ParentRelations[Field.RelationName].ParentTable.Columns[Field.FieldName];
                dt.Columns.Add(dc.ColumnName, dc.DataType, dc.Expression);
            }
        }
        if (ds!=null)
            ds.Tables.Add(dt);
        return dt;
    }
}
				

InsertJoinInto yöntemi

Bu bölüm, InsertJoinInto yönteminin kodunu içerir. InsertJoinInto yöntemi sıralanır ve kaynak tablosundan süzülmüş ve tablolar için hedef tablodaki ilgili kayıtları kopyalar. Bu listeler varsa ParseFieldList özelliği'i ça??rd???n?zda, daha önce ayrıştırıldı listeleri ayrıştırabilir. Alan listesi boşsa, bir özel durum atılır.

InsertJoinInto yöntemi için bir çağrı kuralı aşağıdadır:
dsHelper.InsertJoinInto(ds.Tables["TestTable"], ds.Tables["Employees"], 
    "FirstName FName,LastName LName,DepartmentEmployee.DepartmentName Department", 
    "EmployeeID<5", "BirthDate");
				
çağrı örnek TestTable DataTable, DataTable çalışanları (ve ilişkili bir DataTable ' ın DepartmentName alanından) üzerinde filtre kayıtları kopyalar "ÇalışanNo < 5" ve doğum tarihi sıralanır.

Not: Süzgeç ve sıralama ifadeler yalnızca kaynak tablo ve ilişkili tüm tablolar için geçerlidir.

InsertJoinInto yöntemini çağırmak için <a0></a0>, "" bölümünde oluşturduğunuz DataSetHelper sınıfa aşağıdaki yöntemi ekleyin:
public void InsertJoinInto(DataTable DestTable, DataTable SourceTable, 
    string FieldList, string RowFilter, string Sort)
{
    /*
    * Copies the selected rows and columns from SourceTable and inserts them into DestTable
    * FieldList has same format as CreatejoinTable
    */ 
    if (FieldList==null)
    {
        throw new ArgumentException("You must specify at least one field in the field list.");
        //InsertInto(DestTable, SourceTable, RowFilter, Sort);
    }
    else
    {
    ParseFieldList(FieldList, true);
    DataRow[] Rows = SourceTable.Select(RowFilter, Sort);
    foreach(DataRow SourceRow in Rows)
    {
            DataRow DestRow = DestTable.NewRow();
            foreach(FieldInfo Field in m_FieldInfo)
            {
                if(Field.RelationName==null)
                {
                    DestRow[Field.FieldName] = SourceRow[Field.FieldName];
                }
                else
                {
                    DataRow ParentRow = SourceRow.GetParentRow(Field.RelationName);
                    DestRow[Field.FieldName] = ParentRow[Field.FieldName];
                }
            }
            DestTable.Rows.Add(DestRow);
        }
    }
}
				

SelectJoinInto yöntemi

Bu bölüm SelectJoinInto yönteminin kodunu içerir. Bu yöntem CreateJoinTable ve InsertJoinInto yöntemlerinin bir birleşimidir. SelectJoinInto yöntemine göre sıralanmış ve yeni DataTable süzülmüş varolan DataTable nesneleri ve kopya kayıtları yeni bir DataTable oluşturur.

SelectJoinInto yöntemi için bir çağrı kuralı aşağıdadır:
dt = dsHelper.SelectInto("TestTable", ds.Tables["Employees"], 
    "FirstName FName,LastName LName,DepartmentEmployee.DepartmentName Department", "EmployeeID<5", "BirthDate");
				
Bu örnek çağrı TestTable üç alan adında bir DataTable oluşturur. Bu üç alan ad ve Çalışanlar DataTable soyad alanlarının ve DepartmentEmployee DataRelation başvurulan, DataTable DepartmentName alanının temel alır. Bu örnek üzerinde filtrelenen TestTable DataTable, Çalışanlar DataTable nesnesinden kayıtları kopyalar, sonra "ÇalışanNo < 5" ve doğum tarihi sıralanır.

Not: yalnızca kaynak tablo ve değil ilgili tablolara filtre ve sıralama ifadeler için geçerlidir.

SelectJoinInto yöntemini çağırmak için <a0></a0>, "" bölümünde oluşturduğunuz DataSetHelper sınıfa aşağıdaki yöntemi ekleyin:
public DataTable SelectJoinInto(string TableName, DataTable SourceTable, string FieldList, string RowFilter, string Sort)
{
    /*
     * Selects sorted, filtered values from one DataTable to another.
     * Allows you to specify relationname.fieldname in the FieldList to include fields from
     *  a parent table. The Sort and Filter only apply to the base table and not to related tables.
    */ 
    DataTable dt = CreateJoinTable(TableName, SourceTable, FieldList);
    InsertJoinInto(dt, SourceTable, FieldList, RowFilter, Sort);
    return dt;
}
				

Uygulama sınayın.

  1. Kaydedin ve sonra önceki kısımlarında oluşturduğunuz DataSetHelper sınıfı derleyin.
  2. Bir yeni Visual C# Windows uygulaması oluşturmak için şu adımları izleyin:
    1. Visual Studio .NET'i başlatın.
    2. Dosya menüsünde Yeni ' nin üzerine gelin ve sonra Project ' i tıklatın.
    3. Yeni proje) iletişim kutusunda, Project Types altında Visual C# Projects ' ı tıklatın ve şablonları altında Windows uygulama ' yı tıklatın.
  3. Solution Explorer'da (Çözüm Gezgini), çözüm'ı sağ tıklatın ve sonra Varolan Project Ekle'yi tıklatın. DataSetHelper projeye ekleyin.
  4. Proje) menüsünde Add Reference ' ı tıklatın.
  5. Başvuru Ekle) iletişim kutusunda, Projeler sekmesini tıklatın ve sonra da Windows Form'u uygulamaya DataSetHelper proje başvurusu ekleyin.
  6. Form tasarımcısında, üç Düğme denetimi ve bir DataGrid denetimi forma Araç kutusundan sürükleyin. Düğmeleri btnCreateJoin, btnInsertJoinInto ve btnSelectJoinInto adı. DataGrid denetimi (dataGrid1) için varsayılan adı tutun.
  7. Form kodunu, aşağıdaki kullanma ifadeyi kod penceresine üstüne ekleyin:
    using System.Data;
    					
  8. Aşağıdaki değişken bildirimi için form tanımını ekleyin:
    DataSet ds; DataSetHelper.DataSetHelper dsHelper;
    					
  9. Form_Load olay için aşağıdaki kodu ekleyin:
    ds = new DataSet();
    dsHelper = new DataSetHelper.DataSetHelper(ref ds);
    //Create source tables
    DataTable dt = new DataTable("Employees");
    dt.Columns.Add("EmployeeID",Type.GetType("System.Int32") );
    dt.Columns.Add("FirstName", Type.GetType("System.String"));
    dt.Columns.Add("LastName", Type.GetType("System.String"));
    dt.Columns.Add("BirthDate", Type.GetType("System.DateTime"));
    dt.Columns.Add("JobTitle", Type.GetType("System.String"));
    dt.Columns.Add("DepartmentID", Type.GetType("System.Int32"));
    dt.Rows.Add(new object[] {1, "Tommy", "Hill", new DateTime(1970, 12, 31),  "Manager", 42});
    dt.Rows.Add(new object[] {2, "Brooke", "Sheals", new DateTime(1977, 12, 31), "Manager", 23});
    dt.Rows.Add(new object[] {3, "Bill", "Blast", new DateTime(1982, 5, 6), "Sales Clerk", 42});
    dt.Rows.Add(new object[] {1, "Kevin", "Kline", new DateTime(1978, 5, 13), "Sales Clerk", 42});
    dt.Rows.Add(new object[] {1, "Martha", "Seward", new DateTime(1976, 7, 4), "Sales Clerk", 23});
    dt.Rows.Add(new object[] {1, "Dora", "Smith", new DateTime(1985, 10, 22), "Trainee", 42});
    dt.Rows.Add(new object[] {1, "Elvis", "Pressman", new DateTime(1972, 11, 5), "Manager", 15});
    dt.Rows.Add(new object[] {1, "Johnny", "Cache", new DateTime(1984, 1, 23), "Sales Clerk", 15});
    dt.Rows.Add(new object[] {1, "Jean", "Hill", new DateTime(1979, 4, 14), "Sales Clerk", 42});
    dt.Rows.Add(new object[] {1, "Anna", "Smith", new DateTime(1985, 6, 26), "Trainee", 15});
    ds.Tables.Add(dt);
    
    dt = new DataTable("Departments");
    dt.Columns.Add("DepartmentID", Type.GetType("System.Int32"));
    dt.Columns.Add("DepartmentName", Type.GetType("System.String"));
    dt.Rows.Add(new object[] {15, "Men's Clothing"});
    dt.Rows.Add(new object[] {23, "Women's Clothing"});
    dt.Rows.Add(new object[] {42, "Children's Clothing"});
    ds.Tables.Add(dt);
    
    ds.Relations.Add("DepartmentEmployee",     ds.Tables["Departments"].Columns["DepartmentID"], 
        ds.Tables["Employees"].Columns["DepartmentID"]);
    					
  10. BtnCreateJoin_Click olay için aşağıdaki kodu ekleyin:
    dsHelper.CreateJoinTable("EmpDept",ds.Tables["Employees"], 
        "FirstName FName,LastName LName,BirthDate,DepartmentEmployee.DepartmentName Department");
    dataGrid1.SetDataBinding(ds, "EmpDept");
    					
  11. BtnInsertJoinInto_Click olay için aşağıdaki kodu ekleyin:
    dsHelper.InsertJoinInto(ds.Tables["EmpDept"], ds.Tables["Employees"], 
        "FirstName FName,LastName LName,BirthDate,DepartmentEmployee.DepartmentName Department",
        "JobTitle='Sales Clerk'", "DepartmentID");
    dataGrid1.SetDataBinding(ds, "EmpDept");
    					
  12. BtnSelectJoinInto_Click olay için aşağıdaki kodu ekleyin:
    dsHelper.SelectJoinInto("EmpDept2", ds.Tables["Employees"],
        "FirstName,LastName,BirthDate BDate,DepartmentEmployee.DepartmentName Department", 
        "JobTitle='Manager'", "DepartmentID");
    dataGrid1.SetDataBinding(ds, "EmpDept2");
    					
  13. Uygulamayı çalıştırın ve her düğmesini tıklatın. DataGrid tabloları ve kod verilerden doldurulur dikkat edin.

    Not: size yalnızca btnCreateJoin ve btnSelectJoinInto düğmeleri bir kez tıklatabilirsiniz. Birden çok kez bu düğmelerden birini tıklatırsanız, aynı tabloda iki kez eklemek istediğiniz bir hata iletisi alırsınız. Ayrıca, btnInsertJoinInto tıklatmadan önce btnCreateJoin tıklatmanız gerekir; aksi halde, hedef DataTable oluşturulmaz. Birden çok kez btnInsertJoinInto düğmesini tıklatırsanız, yinelenen kayıtlarla DataGrid doldurun.

Geliştirme Düşünceler

  • ColumnName ve VeriTürü özellikleri DataTable hedefe kopyalanan yalnızca özellikleri var. MaxLength özelliği gibi ek özellikler, kopyalanacak CreateTable yöntemi genişletebilirsiniz veya yeni bir anahtar sütunlar oluşturabilirsiniz.
  • Expression özelliği kopyalanmaz; bunun yerine, sonucu Değerlendirilmiş kopyalanır. Bu nedenle, ifade hedef tablonun başvurulan alanlarını eklemek gerekmez. Ayrıca, hedef sütunun Sonuç listesinde sütun bu sütun yoksa bağlı daha önce görünür. Bu paragrafta açıklanan sınırlamalarına tabi bu olmasına rağmen (bir ifade içeren sütunlar InsertInto sütun dikkate almaz) deyim kopyalamak için CreateTable yöntemi değiştirebilirsiniz.
  • CreateJoinTableInsertJoinInto ve SelectJoinInto yöntemleri işlevselliğini CreateTableInsertInto ve SelectInto yöntemleri birleştirebilirsiniz. CreateTableInsertInto ve SelectInto yöntemleri hakkında ek bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
    326009Nasıl YAPıLıR: SELECT INTO DataSet yardımcı sınıfı, Visual C# .NET ile gerçekleştir
    Bu yöntemler birleştirmek istiyor, ancak tek bir sınıf içinde yöntemler her iki kümesi varsa, CreateJoinTable ve InsertJoinInto yöntemleri bir boş alan listesini, Durum ifadeleri kaldırma ve çağrıları CreateTable ve aşağıdaki kod satırlarını InsertInto yöntemleri uncommenting işlemek etkinleştirebilirsiniz:
        if (FieldList==null)
        {
            throw new ArgumentException("You must specify at least one field in the field list.");
            //return CreateTable(TableName, SourceTable);
        }
    					
    - ve -
        if (FieldList==null)
        {
            throw new ArgumentException("You must specify at least one field in the field list.");
            //InsertInto(DestTable, SourceTable, RowFilter, Sort);
        }
    					

SORUN GİDERME

  • AlanAdı ve alan listesinin diğer bölümleri ile DataColumn adlandırma kurallarına uymanız gerekir. Çözümleyici, nokta (.) adı içermelidir, aynı zamanda, adları kısıtlar virgül (,) ya da bir boşluk ().
  • Birden çok kez düğmesini, aynı tabloda iki kez; böylece bir özel durum DataSet'in eklenir. Bu soruna geçici bir çözüm bulmak için <a0></a0>, aynı adlı bir DataTable zaten var olup olmadığını denetlemek için sınama uygulaması için kodu ekleyebilirsiniz. Alternatif olarak, bir DataSet başvuru olmadan DataSetHelper sınıfı oluşturmak ve sonra DataGrid.DataSource özelliği dt değişkeni yerine SetDataBinding yöntemi çağrısı ile bağlanın.
  • Kaynak tabloyu özel veri türleri (yani, bir sınıfı) kullanıyorsa, verileri daha derin bir kopyasını yapmak için InsertJoinInto yöntemi kodu eklemeniz gerekir. Aksi takdirde, yalnızca bir başvuru kopyalanır.

Özellikler

Makale numarası: 326080 - Last Review: 3 Eylül 2003 Çarşamba - Gözden geçirme: 2.3
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft ADO.NET 1.1
  • Microsoft ADO.NET 1.0
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Anahtar Kelimeler: 
kbmt kbhowtomaster kbsystemdata KB326080 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:326080

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com