خواطر برمجية

27
ي ش ل ك ل ب ق ود ك ل ا ا هذ ب ل ط ن ب ن ع الذوت م ل غ ت ش ن ي حتusing System.Data; using System.Data.SqlClient; ز ي ب ا ع الذات م, ن ش ك ب ن و ك ل م ع لsqlConnection con = new sqlConnection(); ع ن ز سي, ن ش ك ت و ك ل, اج ت ح ي ب ك ج يلاو ا ا وهذSqlConnection testConnection = new SqlConnection(); string testConnectionString = "Data Source=(local);Initial Catalog=Test;Integrated Security=SSPI"; testConnection.ConnectionString = testConnectionString; , ن ش ك ت و ك ل ل ل ما ك ال ق ي ب ط ت ل واSqlConnection testConnection = new SqlConnection(); try { testConnection.Open(); if (testConnection.State == ConnectionState.Open) { Console.WriteLine("Successfully opened a connection"); catch (Exception) { if (testConnection.State != ConnectionState.Open) { 1

Upload: abdulhameed

Post on 15-Nov-2014

167 views

Category:

Documents


0 download

DESCRIPTION

برمجة الدوت نت باللغة العربية العامية

TRANSCRIPT

Page 1: خواطر برمجية

شي كل قبل الكود هذا نطلب نت الدوت مع نشتغل حتى

using System.Data;using System.Data.SqlClient;

بيز الداتا مع كونيكشن لعمل

sqlConnection con = new sqlConnection();

سترنغ لكونكشن يحتاج االوبجكت وهذا

SqlConnection testConnection = new SqlConnection();string testConnectionString ="Data Source=(local);Initial Catalog=Test;Integrated Security=SSPI";testConnection.ConnectionString = testConnectionString;

للكونكشن الكامل والتطبيق

SqlConnection testConnection = new SqlConnection();try

{testConnection.Open();if (testConnection.State == ConnectionState.Open)

{Console.WriteLine("Successfully opened a connection");

catch (Exception){

if (testConnection.State != ConnectionState.Open){

Console.WriteLine("Failed to open a connection");}

}

finally{

// Closing a connection ensures connection pooling.if (testConnection.State == ConnectionState.Open){

testConnection.Close();}

testConnection.Dispose();

1

Page 2: خواطر برمجية

}

البرنامج عمل أثناء انت تحددها خاصة بمواصفات كونيكشن لعمل تحتاج عندمابيلدر سترنغ كونيكشن عن تتحدث إذن فأنت

SqlConnectionStringBuilder connstrBuilder = new SqlConnectionStringBuilder();connstrBuilder.DataSource = "(local)";connstrBuilder.InitialCatalog = "Test";connstrBuilder.IntegratedSecurity = true;

using (SqlConnection testConnection = new SqlConnection(connstrBuilder.ToString())){try{

testConnection.Open();if (testConnection.State == ConnectionState.Open){

Console.WriteLine("Connection successfully opened");Console.WriteLine("Connection string used: " +testConnection.ConnectionString);

}}catch (Exception){

if (testConnection.State != ConnectionState.Open){

Console.WriteLine("Connection open failed");Console.WriteLine("Connection string used: " + testConnection.ConnectionString);

}}// Automatic dispose call on conn ensures connection is closed.Console.WriteLine("Press any key to continue ..");Console.Read();

اوبجكت للكوماند نحتاج واآلن بيز الداتا مع ارتباط عمل تم المرحلة هذي خالل : وهي اوبجكت الكوماند إلنشاء طرق عدة وهناك بيز الداتا مع للتعامل

// Instantiate Command and specify Connection in two stepsSqlCommand testCommand = new SqlCommand();testCommand.Connection = testConnection;

2

Page 3: خواطر برمجية

// Instantiate Comamnd and specify Connection in single stepSqlCommand testCommand = new SqlCommand("<<commandtext here>>", testConnection);

// Using CreateCommand methodSqlCommand testCommand = testConnection.CreateCommand();

بيز الداتا مع التعامل نوع تحديد يتم اوبجكت الكوماند خالل ومن

// Instantiate Command and specify command text in two stepsSqlCommand testCommand = new SqlCommand();testCommand.CommandText = "SELECT COUNT(*) FROM TestDemo";// Instantiate Command and specify command text in single stepSqlCommand testCommand = new SqlCommand("SELECT COUNT(*) FROM TestDemo");

االوبجكت هذا يحوها عديدة ميثود وهناك

int numResults = (int) testCommand.ExecuteScalar();

االبجكت نوع حسب على كاستينغ فنسويله تايب أوبجكت ترجع هذي الميثود. انتيغر نبيه اللي

اوبجكت الكوماند عمل يوضح مثال وهذا

string connectionString ="Data Source=(local);Initial Catalog=Test;Integrated Security=SSPI;"using (SqlConnection testConnection = new SqlConnection(connectionString))

{SqlCommand testCommand =new SqlCommand("SELECT COUNT(*) FROM TestDemo",testConnection);testConnection.Open();int numResults = (int) testCommand.ExecuteScalar();Console.WriteLine("Total number of rows in TestDemo: " + numResults);testConnection.Close();

}Console.Read();

ريدر داتا وترجع مودل الديسكونيكتد في تستخدم أخرى ميثود وهناك

3

Page 4: خواطر برمجية

SqlDataReader sqlDr = testCommand.ExecuteReader(CommandBehavior.CloseConnection);

فقط للقراءة مفهوم يوضح ريدر للداتا تطبيق في –وهذا وحط فقط لألمامالعام : المفهوم هذا بالك

IDataRecordInstance["MyColumn"]; // Using Column NameIDataRecordInstance[0] ; // Using the column ordinal

if (sqlDr.HasRows){

while (sqlDr.Read()){

Console.WriteLine("TestDemo: " + sqlDr.GetInt32(0)+ " and Description : " + sqlDr.GetString(1));

}}

ريدر الداتا مع التعامل كيفية يوضح آخر مثال وهذا

string connectionString ="Data Source=(local);Initial Catalog=Test;Integrated Security=SSPI";using (SqlConnection testConnection = new SqlConnection(connectionString)){

SqlCommand testCommand =new SqlCommand("SELECT * FROM TESTDEMO", testConnection);testConnection.Open();SqlDataReader sqlDr =testCommand.ExecuteReader(CommandBehavior.CloseConnection);

if (sqlDr.HasRows){

foreach (DbDataRecord rec in sqlDr){dbRecordsHolder.Add(rec); // dbRecordsHolder is an ArrayList}

}} // testConnection.Dispose is called automatically

myDataGrid.DataSource = dbRecordsHolder;

4

Page 5: خواطر برمجية

داخل العمليات من سلسلة تنفذ أن تستطيع ريدر الداتا في حلوة ميزة وهناكالميزة هذي يوضح مثال من جزء وهذا واحد أوبجكت كوماند

SqlCommand cmd =new SqlCommand("SELECT * FROM USERBASICINFORMATION" + ";" +"SELECT * FROM PERMISSIONSTABLE", conn);

if (sqlDr.HasRows){

do{Console.WriteLine(" ");while (sqlDr.Read()){

Console.WriteLine(sqlDr.GetInt32(0)+ " : " + sqlDr.GetString(1));

}} while (sqlDr.NextResult());}

الداتاتابل داخل ونوعه الكولمن يحدد كولمن الداتا

// Adding a column using the constructorDataColumn myColumn = new DataColumn("ID", typeof(System.Int32));// Adding a column using a DataTableproductsTable.Columns.Add("ID", Type.GetType("System.Int32")) ;

المثال هذا خالل من بنيته وتحديد داتاتابل بناء ويمكن

// Create a new DataTableDataTable productsTable = new DataTable("Products") ;// Build the products schemaproductsTable.Columns.Add("ID", typeof(System.Int32)) ;productsTable.Columns.Add("Name", typeof(System.String)) ;productsTable.Columns.Add("Category", typeof(System.Int32)) ;

نستخدم الزم بيانات نماله وعلشان وداتاتابل داتاكولمن عندنا صار الحينداتارو

// Create a new DataRow with the same schema as the DataTableDataRow tempRow = productsTable.NewRow() ;tempRow["ID"] = 1 ;tempRow["Name"] = "Caterham Seven de Dion" ;

5

Page 6: خواطر برمجية

tempRow["Category"] = 1 ;// Add the DataRow to the DataTableproductsTable.Rows.Add(tempRow) ;

للداتاتابل كي برايمري ولتحديد// Set up the ID column as the primary keyproductsTable.PrimaryKey =new DataColumn[] { productsTable.Columns["ID"] };

وزيادة سبق ما يوضح المثال وهذا

// Create the tableDataTable productsTable = new DataTable("Products") ;// Build the Products schemaproductsTable.Columns.Add("ID", typeof(System.Int32)) ;productsTable.Columns.Add("Name", typeof(System.String)) ;productsTable.Columns.Add("Category", typeof(System.Int32)) ;// Set up the ID column as the primary keyproductsTable.PrimaryKey =new DataColumn[] { productsTable.Columns["ID"] };productsTable.Columns["ID"].AutoIncrement = true ;productsTable.Columns["ID"].AutoIncrementSeed = 1 ;productsTable.Columns["ID"].ReadOnly = true ;

الداتاتابل في الكولمن قيمة تغيير أن ويمكن

productsTable.Rows[0]["Name"] = "Pinto";

على بينهم شيب ريالشن نحط نقدر داتاتابل من اكثر وجد اذا الداتاست داخلالتالي الشكل

//Create a relation between Customers and Orders.myDataSet.Relations.Add("CustomersToOrders",myDataSet.Tables["Customers"].Columns("CustomerID"],myDataSet.Tables["Orders"].Columns["CustomerID"]) ;

اكثر االمور نحلل نقدر أو

// Create two DataColumnsDataColumn parentColumn ;DataColumn childColumn ;// Set the two columns to instances of the parent and child columnsparentColumn = myDataSet.Tables["Customers"].Columns["CustomerID"] ;

6

Page 7: خواطر برمجية

childColumn = myDataSet.Tables["Orders"].Columns["CustomerID"] ;// Create a new DataRelation objectDataRelation customersToOrders = New DataRelation("CustomersToOrders",parentColumn, childColumn) ;// Add the DataRelation to the DataSet.Relations collectionmyDataSet.Relations.Add(customersToOrders) ;

كالتالي االرى تستخدم وتقدر// Create arrays of DataColumns for the relevant columnsDataColumn[] parentArray = new DataColumn[2];parentArray[0] = myDataSet.Tables["Employees"].Columns["FirstName"] ;parentArray[1] = myDataSet.Tables["Employees"].Columns["LastName"] ;DataColumn[] childArray = new DataColumn[2];childArray[0] = myDataSet.Tables["Managers"].Columns["FirstName"] ;childArray[1] = myDataSet.Tables["Managers"].Columns["LastName"] ;DataRelation empToMngr = New DataRelation("EmployeesToManagers", parentArray,childArray) ;myDataSet.Relations.Add(EmpToMngr) ;

الداتا تفتح انك يحتاج ما وهذا ادابتر الداتا نستخدم مودل للديسكونكتد بالنسبةاتوماتكيلي هو به يقوم شي كل تسكرها او بيز

partial class Form1 : Form{private DataTable userTable;public Form1(){InitializeComponent();userTable = new DataTable();}...}private void buttonFillData_Click(object sender, EventArgs e){// Never hard code connection strings.// Usually you would get this from a config filestring connectionString ="Data Source=(local);Initial Catalog=Test;Integrated Security=SSPI;" ;

7

Page 8: خواطر برمجية

using (SqlConnection testConnection = new SqlConnection(connectionString)){

SqlCommand testCommand = testConnection.CreateCommand();testCommand.CommandText = "Select FirstName, LastName from userTable";SqlDataAdapter dataAdapter = new SqlDataAdapter(testCommand);dataAdapter.Fill(userTable);

} // testConnection.Dispose called automatically.private void buttonBind_Click(object sender, EventArgs e){datagridView.DataSource = userTable;}

باستخدام ذلك ويمكن الداتاست في الداتاكولمن أسماء تغيير إلى تحتاج أحياناAS آخر بديل لك توفر نت الدوت ولكن الداتابيز مستوى على

// Define a connection object...// Create a data adapter object to retrieve records from DbDoDataMappings(usersDataAdapter);// Fill the dataset...// go through the records and print them using the mapped names

private static void DoDataMappings(SqlDataAdapter dataAdapter){try{

// Define an array of columns to map.DataColumnMapping[] mappedColumns = {new DataColumnMapping("ID", "UserID"),new DataColumnMapping("fn", "FirstName"),new DataColumnMapping("ln", "LastName"),new DataColumnMapping("cty", "City"),new DataColumnMapping("st", "State")};

// Define the table containing the mapped columns.DataTableMapping usersTableMapping = new DataTableMapping("Table", _"tabUsers", mappedColumns);// Activate the mapping mechanism.dataAdapter.TableMappings.Add(usersTableMapping);}catch (Exception ex){Console.WriteLine(ex.ToString());

8

Page 9: خواطر برمجية

}}

كي ببرايمري معين رو عن للبحث// Base DataTableDataTable myTable = DataSetFiller.FillDataset(dataFilePath).Tables[0] ;// Set Primary KeymyTable.PrimaryKey = new DataColumn[] { myTable.Columns["CustomerID"] };DataRow dr = myTable.Rows.Find("2");if (dr != null){Console.WriteLine("Find a row using a base DataSet");

ShowDataRow(dr);}static void ShowDataRow(DataRow dr){foreach (DataColumn dc in dr.Table.Columns){Console.Write(dr[dc] + " ");}Console.Write("\n\n");}

واآلن كي البرايمري بداللة فقط واحد رو عن البحث السابق المثال كانالشرط بداللة ولكن الروز من مجموعة عن البحث

DataRow[] drs = myTable.Select("FirstName Like 'Jo%'");

األمر يوضح كامل مثال وهذا

static void Main(string[] args){DataTable myTable = DataSetFiller.FillDataset(dataFilePath).Tables[0];DataRow[] drs = myTable.Select("LastName Like '%OfJungle'","FirstName ASC");if (drs != null){foreach (DataRow dr in drs){ShowDataRow(dr);}

9

Page 10: خواطر برمجية

}

الرو في البيانات بعض تغير أن أردت وإذا

DataTable myTable = DataSetFiller.FillDataset(dataFilePath).Tables[0];myTable.PrimaryKey = new DataColumn[] { myTable.Columns["CustomerID"] };myTable.AcceptChanges();DataRow janeRow = myTable.Rows.Find("5");janeRow["LastName"] = "QueenOfJungle";

ذلك يمكن تغيير فيها حصل التي الصفوف ولمعرفةDataRow[] drs = myTable.Select("", "", DataViewRowState.ModifiedCurrent);

من ألكثر معينة حسابية عملية ناتج عن عبارة داتاكولمن نحتاج أحيانا . ( ذلك ( يمكن للداتاتابل المحسوب الجديد الداتاكولمن هذا ويضاف داتاكولمن

التالي النحو على

DataSet customerProducts =CreateDataSet.DataSetFiller.FillStrongDataSet(dataFilePath);DataTable productsTable = customerProducts.Tables[1];DataColumn totalPrice = new DataColumn("Total Price");totalPrice.Expression = "Price + Price * TaxPercent";productsTable.Columns.Add(totalPrice);

عليه تسوي تقدر فما سترنغ بياناته نوع داتاكولمن عندك يكون أحيانا بسحق البيانات نوع نخلي الحسابية العمليات قبل يكون والحل حسابية عمليات

انتغر مثال الداتاكولمن

productsTable.Columns["Price"].DataType = typeof(System.Int32);// Fill Data here

نحتاج أحيانا ولكن الواحد الرو مستوي على ينطبق شوي قبل اللي الكالمكالتالي أيضا ذلك ويمكن الداتاتابل مستوى على نعمل

private void Form1_Load(object sender, EventArgs e){DataSet customerProducts =CreateDataSet.DataSetFiller.FillStrongDataSet(dataFilePath);// productsTable is defined as a private variable in the class.productsTable = customerProducts.Tables[1];DataColumn totalPrice = new DataColumn("Total Price");totalPrice.Expression = "Price + Price * TaxPercent";productsTable.Columns.Add(totalPrice);

10

Page 11: خواطر برمجية

dataGridView1.DataSource = productsTable;}private void btnSumPrices_Click(object sender, EventArgs e){string price = productsTable.Compute("Sum(Price)", "").ToString();lblSumPrice.Text = "The total price is : " + price;}

أكثر الشرط وتحديد شوي األمر توسيع يمكن السابق المثال خالل ومن

string price = productsTable.Compute("Sum(Price)", "Price < 500").ToString();

استخدامه وكيفية داتافيو اسمه جديد أوبجكت عن نتكلم راح

DataView dv = new DataView( productsTable, "ProductID = 1", "ProductName", DataViewRowState.Unchanged);

عمله كيفية يوضح بسيط ومثال DataView animalView = null; private void btnLoad_Click(object sender, EventArgs e) { Excercise8._8.DataSet1.AnimalDataTable tblAnimal = new Excercise8._8.DataSet1.AnimalDataTable(); Excercise8._8.DataSet1TableAdapters.AnimalTableAdapter adapter = new Excercise8._8.DataSet1TableAdapters.AnimalTableAdapter(); adapter.Fill(tblAnimal); animalView = new DataView(tblAnimal); dgView.DataSource = animalView; }

private void btnSort_Click(object sender, EventArgs e) { animalView.Sort = "AnimalName ASC"; }

private void btnRows_Click(object sender, EventArgs e) { animalView.RowFilter = "AnimalName like '%o%'"; }

private void btnFind_Click(object sender, EventArgs e) { DataRowView[] drs = animalView.FindRows("Dog");

11

Page 12: خواطر برمجية

foreach (DataRowView dr in drs) { MessageBox.Show(dr["AnimalID"] + " " + dr["AnimalName"] + " " + " Selected"); } }

داتاتابل إلى الداتافيو تحول تقدر بعد ثاني وشي

DataTable custProdTable = DataSetFiller.FillDataset(dataFilePath).Tables(2) ;DataView view = new DataView[custProdTable];view.RowFilter = "ProductID > 2";DataTable subsetTable = view.ToTable[];// orDataTable subsetTable = view.ToTable["TableName"];

يعمل كما تعمل حيث ميثود توتابل في أخرى ميزة سكول Distinctوهناك فيببساطة ذلك عمل ويمكن فقط فريدة قيم يرجع لما

DataTable custProdTable = DataSetFiller.FillDataset(dataFilePath).Tables(2) ;DataView view = new DataView[custProdTable];view.RowFilter = "ProductID > 2";DataTable subsetTable = view.ToTable[true,"ProductID"];

الداتابل في الداتاكولمن عدد تقليل حبينا اذا بعد وهذا

DataTable subsetTable = view.ToTable[false, "CustomerID", "ProductID"];

الروستات عمل يوضح مثال وهذا

private static void DisplayRowStates(string Message, DataTable table){Console.Clear();Console.WriteLine("\n");Console.WriteLine(Message);Console.WriteLine("-------------------------------------------");foreach (DataRow dr in table.Rows){Console.WriteLine(dr.RowState.ToString());}Console.WriteLine("\nPress Enter to Continue ..") ;Console.Read() ;

12

Page 13: خواطر برمجية

}

static void Main(string[] args){using (SqlConnection testConnection = new SqlConnection(connectionString)){SqlCommand testCommand = testConnection.CreateCommand();testCommand.CommandText = "Select * from Animals";SqlDataAdapter sqlDa = new SqlDataAdapter(testCommand);DataTable animalsTable = new DataTable("Animals");sqlDa.Fill(animalsTable);DisplayRowStates("Row states for a freshly filled DataTable:",animalsTable);}}

DataRow rowInQuestion;// Make Changes - Modify the puppyrowInQuestion = animalsTable.Rows[0];rowInQuestion["AnimalName"] = "Dog";// Make Changes - Delete the catrowInQuestion = animalsTable.Rows[1];rowInQuestion.Delete();// Leave the Horse untouched.// Make Changes - Insert a camelrowInQuestion = animalsTable.NewRow();rowInQuestion["AnimalID"] = 4;rowInQuestion["AnimalName"] = "Camel";animalsTable.Rows.Add(rowInQuestion);DisplayRowStates("Row states for a modified DataTable:", animalsTable);

rowInQuestion = animalsTable.NewRow();rowInQuestion["AnimalID"] = 5;rowInQuestion["AnimalName"] = "Monkey";

// Update the changes back to the database.SqlCommandBuilder cmbldr = new SqlCommandBuilder(sqlDa);// Setup Update CommandsqlDa.UpdateCommand = cmbldr.GetUpdateCommand();Console.WriteLine("Update Command: " + sqlDa.UpdateCommand.CommandText);// Setup Insert CommandsqlDa.InsertCommand = cmbldr.GetInsertCommand();

13

Page 14: خواطر برمجية

Console.WriteLine("Insert Command: " + sqlDa.InsertCommand.CommandText);// Setup Delete CommandsqlDa.DeleteCommand = cmbldr.GetDeleteCommand() ;Console.WriteLine("Delete Command: " + sqlDa.DeleteCommand.CommandText);sqlDa.Update(animalsTable);

DisplayRowStates("Final Row States:", animalsTable);

لكل رحالت ثالث بعمل قمت الثالثة لألبدايت السابق الكود في واحد عيب هناكابدايت كل قبل سايز باتش ابدايت استخدم المشكلة هذه على وللتغلب أبدايت

sqlDa.UpdateBatchSize = 3;

على ويصر حدة على رو كل يعالج انه الداتاادابتر في أساسي عيب هناكباستخدام المشكلة هذه معالجة وتمت رو كل على السكويل اوامر استخدام

العديد بين البيانات نقل حالة في المشكلة هذه تبقى ولكن سايز باتش ابدايت . . مثال وهذا كالس كوبي بولك سكل نستخدم المشلة هذه ولحل التابلز من

static void Main(string[] args) { string constr = @"Data Source=ADB2CIC00W10554\SQLEXPRESS;Initial Catalog=Animals;Integrated Security=True";

using (SqlConnection firstcon = new SqlConnection(constr)) { SqlCommand com = firstcon.CreateCommand(); com.CommandType = CommandType.Text; com.CommandText = "SELECT * FROM Animal "; firstcon.Open(); SqlDataReader dr = com.ExecuteReader();

using (SqlConnection secondcon = new SqlConnection(constr)) { SqlBulkCopy bc = new SqlBulkCopy(secondcon); bc.DestinationTableName = "AnimalCopy"; secondcon.Open(); bc.WriteToServer(dr); bc.Close(); dr.Close(); } } }

مودل الديسكونكتد في الروز الديليت أو ابدايت أو اد عن سنتحدث هنا من

14

Page 15: خواطر برمجية

طريقتان : هناك داتاتابل على روز إلصافة موجود رو اضافة. جديد رو اضافة

حالتان هناك جديد رو اضافة حالة ففي موجودة سكيما الداتاتابل

rowInQuestion = animalsTable.NewRow();rowInQuestion["AnimalID"] = 4;rowInQuestion["AnimalName"] = "Camel";animalsTable.Rows.Add(rowInQuestion);

للداتاتابل جديد رو اضافة يمكن ميثود وهناكobject[] rowVals = {"4", "Camel"} ;animalsTable.LoadDataRow(rowVals, false);

والميثود كباراميتر رو الداتا تأخذ حيث رو امبورت نستخدم موجود رو وإلضافة. ميرج األخرى

تحديثه المراد والداتاكولمن الرو تحديد عليك فقط رو ولتعديلrowInQuestion = animalsTable.Rows[0];rowInQuestion["AnimalName"] = "Dog";

أخرى طريقة وهناط

rowInQuestion = animalsTable.Rows[0];rowInQuestion.BeginEdit();rowInQuestion["AnimalName"] = "Dog";rowInQuestion.EndEdit() ; // This could have been rowInQuestion.CancelEdit() also

أخرى وأيضاrowInQuestion = animalsTable.Rows[0];rowInQuestion.ItemArray = new object[] {null, "Dog"} ;

ديليت استخدم فقط رو ولحذفrowInQuestion = animalsTable.Rows[1];rowInQuestion.Delete();

شانج اكسبت أو أبدات يلزم سبق ما وجميع

الروز لحذف أخرة طريقة وهناك

15

Page 16: خواطر برمجية

animalsTable.Remove(rowInQuestion) ;// oranimalsTable.RemoveAt(1) ;

نستخدم الرو تاريخ ولمعرفة

rowInQuestion = animalsTable.Rows[0];rowInQuestion.BeginEdit();rowInQuestion["AnimalName"] = "Dog";Console.Write(rowInQuestion["AnimalName", DataRowVersion.Proposed]);rowInQuestion.EndEdit() ;Console.Write(rowInQuestion["AnimalName", DataRowVersion.Original]);Console.Write(rowInQuestion["AnimalName", DataRowVersion.Current]);

مثال وهذاpublic Form1(){InitializeComponent();// Setup the schema for the Table.animalsTable = new DataTable("Animals");DataColumn dc = null;dc = new DataColumn("AnimalID");dc.Unique = true;dc.AutoIncrement = true;dc.AutoIncrementSeed = -1;dc.AutoIncrementStep = -1;dc.DataType = typeof(System.Int32);animalsTable.Columns.Add(dc);dc = new DataColumn("AnimalName");animalsTable.Columns.Add(dc);dc = new DataColumn("AccountNumber");dc.ReadOnly = true;animalsTable.Columns.Add(dc);// DataBind it, even though it has no rows in it yet.dgView.DataSource = animalsTable;}

private void btnLoad_Click(object sender, EventArgs e){SqlDataAdapter sqlDA =new SqlDataAdapter("Select * from Animals", connectionString);animalsTable.Rows.Clear();

16

Page 17: خواطر برمجية

sqlDA.Fill(animalsTable);}

private void btnSave_Click(object sender, EventArgs e){SqlCommand insertCommand = new SqlCommand();insertCommand.CommandType = CommandType.StoredProcedure;SqlParameter param = null;param = new SqlParameter("@AnimalID", SqlDbType.Int);param.Direction = ParameterDirection.Output;param.SourceColumn = "AnimalID";insertCommand.Parameters.Add(param);param = new SqlParameter("@AnimalName", SqlDbType.VarChar);param.SourceColumn = "AnimalName";insertCommand.Parameters.Add(param);param = new SqlParameter("@AccountNumber", SqlDbType.Int);param.SourceColumn = "AccountNumber";param.Size = 40;param.Direction = ParameterDirection.Output;insertCommand.Parameters.Add(param);insertCommand.CommandText = "UP_ANIMALINSERT";SqlDataAdapter sqlDA = new SqlDataAdapter("Select * from Animals", connectionString);insertCommand.Connection = new SqlConnection(connectionString);insertCommand.UpdatedRowSource = UpdateRowSource.Both;sqlDA.InsertCommand = insertCommand;sqlDA.Update(animalsTable);}

CREATE PROCEDURE UP_ANIMALINSERT@AnimalID INT OUTPUT,@AnimalName VARCHAR,@AccountNumber INT OUTPUTASBEGIN TRANSACTIONINSERT INTO SEEDGENERATOR DEFAULT VALUESSET @AccountNumber = SCOPE_IDENTITY()ROLLBACK TRANSACTIONINSERT INTO ANIMALS (ANIMALNAME, ACCOUNTNUMBER) VALUES (@AnimalName,@AccountNumber)SELECT @AnimalID = @@IDENTITYGO

17

Page 18: خواطر برمجية

CREATE TABLE [SeedGenerator]( [SeedGenerator] [bigint] IDENTITY(1,1) NOT NULL )ON [PRIMARY]

يوضح التالي المثال فقط الداتاتابل في الحاصلة التغييرات تعرف تحب مراتذلك

private void btnGetChanges_Click(object sender, EventArgs e){CustProd changedDS = (CustProd)myDataSet.GetChanges();dgCustomers.DataSource = changedDS.Customers;dgCustomerProducts.DataSource = changedDS.CustomerProducts;dgProducts.DataSource = changedDS.Products;}

على تطبيقه ويمكن التالي الكود نطبق آخر داتاتابل مع داتاتابل ولدمجأيضا الداتاست

Table1.Merge(Table2) ;

ميكانيزم المابينغ طريق عن ابدايت عمل كيفية مثال هذا

#region Using directivesusing System;using System.Collections.Generic;using System.Text;using System.Data.OleDb;using System.Data.Common;using System.Data;#endregionnamespace Exercise_9_8{class Program{static void Main(string[] args){DataSet dsUsers = new DataSet("Users");try{OleDbConnection dbConn =new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" +"Password=;User ID=Admin;Data Source=db.mdb");// Create a data adapter to retrieve records from db

18

Page 19: خواطر برمجية

OleDbDataAdapter daUsers =new OleDbDataAdapter("SELECT ID,fn,ln,cty,st" +" FROM tabUsers", dbConn);// Define each column to mapDataColumnMapping dcmUserID =new DataColumnMapping("ID", "UserID");DataColumnMapping dcmFirstName =new DataColumnMapping("fn", "FirstName");DataColumnMapping dcmLastName =new DataColumnMapping("ln", "LastName");DataColumnMapping dcmCity =new DataColumnMapping("cty", "City");DataColumnMapping dcmState =new DataColumnMapping("st", "State");// Define the table containing the mapped columnsnew DataTableMapping("Table", "User");dtmUsers.ColumnMappings.Add(dcmUserID);dtmUsers.ColumnMappings.Add(dcmFirstName);dtmUsers.ColumnMappings.Add(dcmLastName);dtmUsers.ColumnMappings.Add(dcmCity);dtmUsers.ColumnMappings.Add(dcmState);// Activate the mapping mechanismdaUsers.TableMappings.Add(dtmUsers);// Fill the datasetdaUsers.Fill(dsUsers);DataColumn[] dcaKey = { dsUsers.Tables["User"].Columns["UserID"] };dsUsers.Tables["User"].PrimaryKey = dcaKey;// Declare a command builder to create SQL instructions// to create and update records.OleDbCommandBuilder cb = new OleDbCommandBuilder(daUsers);// Update an existing record in the DataSetDataRow r = dsUsers.Tables["User"].Rows.Find(8);if (r != null){r["FirstName"] = "Venus";r["LastName"] = "Williams";r["City"] = "Houston";r["State"] = "Texas";// Update the record in the databasedaUsers.Update(dsUsers.GetChanges());// Align in-memory data with the data source onesdsUsers.AcceptChanges();// Print success message

19

Page 20: خواطر برمجية

Console.WriteLine("The record has been updated " +"successfully.");}else{Console.WriteLine("No record found...");}}catch (System.Exception ex){dsUsers.RejectChanges();// An error occurred. Show the error messageConsole.WriteLine(ex.Message);}}}}

20