الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طريقة ارسال XML الى قواعد البيانات والعتامل معها

بدأه black_eagle في 10 مايو 2010 · 3 رد · 912 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم اخواني.

لقد تعبت وانا ابحث عن طريقة لتعديل قواعد البيانات من ال datagrid وخاصة عندما اريد تعديل اكثر من سطر.

لكنني بفضل الله وجدت طريقة , كما وأنني مبتدأ في البرمجة فأنا احببت ان اضع الطريقة بين ايديكم , حتى يستفيد منها من شاء والله ولي الموفق, وأسألكم الدعاء.

أضع الكود بين ايديكم, ومن عنده سؤال فليسألني , وانا سوف اشرح له ان شاء الله.

C#

private void button2_Click(object sender, EventArgs e)
        {

            DataSet After = this.ds.GetChanges();
            DataColumn ModifiedUser = new DataColumn("ModifiedUser",typeof(string))  ;

            //Change Login Users.

            ModifiedUser.DefaultValue = System.Environment.UserName;
            //DataColumn ModifiedDate = new DataColumn("ModifiedDate", typeof(DateTime));
            //ModifiedDate.DefaultValue = DateTime.Now;


            if (After != null)
            {
                After.Tables[0].Columns.Remove("POS_Name");
                After.Tables[0].Columns.Remove("Warehouse_ID");
                After.Tables[0].Columns.Remove("OrderDate");
                After.Tables[0].Columns.Remove("Processed");
                After.Tables[0].Columns.Remove("Item_Description");
                After.Tables[0].Columns.Remove("SalesRep_Plate_Number");
                After.Tables[0].Columns.Remove("Type_Desc");
                After.Tables[0].Columns.Remove("Balance");

                After.Tables[0].Columns.Add(ModifiedUser);

                //After.Tables[0].Columns.Add(ModifiedDate);
                //dg2.DataSource = After.Tables[0];
                //tb1.Text = After.GetXml();

                string xml = After.GetXml();

                updateDB(xml,'1');


            }


        }

        public void updateDB(string data,char TrnType)


         {
             //SqlConnection sqlCon = new SqlConnection(conStr);
             SqlCommand sqlCmd = new SqlCommand();

             try

             { 

             sqlCmd.CommandText = "XML_Update_OutOfStockTable"; 
             sqlCmd.Connection = SqlCon ;
             sqlCmd.CommandTimeout = 900;
             sqlCmd.CommandType =CommandType.StoredProcedure ;
             sqlCmd.Parameters.Add ("@param",SqlDbType.Xml);
             sqlCmd.Parameters[0].Value =data;
             sqlCmd.Parameters.Add("@TrnType", SqlDbType.Char);
             sqlCmd.Parameters[1].Value = TrnType;

             SqlCon.Open();
             int x =sqlCmd.ExecuteNonQuery();
             sqlCmd.Dispose();
             SqlCon.Close();

             //MessageBox.Show("Number of record affected : " + x.ToString());


             }

            catch(Exception ex)
             {
                 string ee = ex.Message;
                 SqlCon.Close();
              }


         }

Database procedure

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE Procedure [dbo].[XML_Update_OutOfStockTable]

@param xml,
@TrnType char(1)

-- 1 update OrderNumber,ItemCode,Qty,OrderPriiority,Modified Users
-- 2 update process.

as
create table #XMLTemp
(
OrderNumber VARCHAR(15) COLLATE Arabic_CI_AI ,
ItemCode    VARCHAR(15) COLLATE Arabic_CI_AI ,
Qty         float,
OrderPriority VARCHAR(3),
ModifiedUser  VARCHAR(50)

)


if @TrnType = '1' 

		BEGIN 

			insert into  #XMLTemp(OrderNumber,ItemCode,Qty,OrderPriority,ModifiedUser)
			SELECT  T.Item.query('./OrderNumber').value('.', 'VARCHAR(15)') OrderNumber,
				T.Item.query('./ItemNumber').value('.', 'VARCHAR(15)') ItemNumber,
				T.Item.query('./Qty').value('.', 'float') Qty,
				T.Item.query('./OrderPriority').value('.', 'VARCHAR(3)') OrderPriority,
				T.Item.query('./ModifiedUser').value('.', 'VARCHAR(50)') ModifiedUser 
			FROM   @param.nodes('/Orders/OrderTable') AS T(Item)


			update   dbo.XMLQueueOutOfStockOrders
			set Qty  = #XMLTemp.Qty ,
			OrderPriority =  #XMLTemp.OrderPriority ,
			ModificationUser =   #XMLTemp.ModifiedUser, 
			ModificationDate = getdate()
			from #XMLTemp inner join XMLQueueOutOfStockOrders on 
			#XMLTemp.OrderNumber    =   XMLQueueOutOfStockOrders.OrderNumber 
			and #XMLTemp.ItemCode =   XMLQueueOutOfStockOrders.ItemNumber     
			drop table #XMLTemp
		 END 

    ELSE 
		 IF  	@TrnType = '2' 


		BEGIN	

			insert into  #XMLTemp(OrderNumber,ItemCode,ModifiedUser)
			SELECT ltrim(rtrim( T.Item.query('./OrderNumber').value('.', 'VARCHAR(15)'))) OrderNumber,
				ltrim(rtrim( T.Item.query('./ItemNumber').value('.', 'VARCHAR(15)'))) ItemNumber,
				T.Item.query('./ModifiedUser').value('.', 'VARCHAR(50)') ModifiedUser 
			FROM   @param.nodes('/root/Orders') AS T(Item)


			update   dbo.XMLQueueOutOfStockOrders
			set ModificationUser =   #XMLTemp.ModifiedUser, 
			Processed = 3,
			ModificationDate = getdate()
			from #XMLTemp inner join XMLQueueOutOfStockOrders on 
			#XMLTemp.OrderNumber    =   XMLQueueOutOfStockOrders.OrderNumber 
			and #XMLTemp.ItemCode =   XMLQueueOutOfStockOrders.ItemNumber   



			drop table #XMLTemp 


 END

تم تعديل هذه المشاركة بواسطة black_eagle في 10 مايو 2010 في 03:17

1
#2

يا ريت ما تحطش الكود و خلاص يا نسر ... من فضلك أشرحه للأعضاء شرح مبسط بدون غموض و خصوصا" كود البروسيدجر

#3
بهاء صلاح الدين فراج كتب:

يا ريت ما تحطش الكود و خلاص يا نسر ... من فضلك أشرحه للأعضاء شرح مبسط بدون غموض و خصوصا" كود البروسيدجر

صدقني يا باشا انه الكود سهل, ومش بحاجة الى شرح.

على ل حال , انا جاهز بأي استفسار.

تحياتي

#4
black_eagle كتب:

صدقني يا باشا انه الكود سهل, ومش بحاجة الى شرح.

على ل حال , انا جاهز بأي استفسار.

تحياتي

كلام نظامي

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…