السلام عليكم اخواني.
لقد تعبت وانا ابحث عن طريقة لتعديل قواعد البيانات من ال 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