PDA

View Full Version : update کردن جدول



kati
سه شنبه 10 خرداد 1384, 13:50 عصر
فیلدهای یک جدول به TextBoxهای برنامه Bind شده. بعد از تغییرات داده ها توسط کاربر و زدن دکمه Update تغییراتی که در Dataset ثبت شده به table منتقل نمی شود.

SqlDataAdapter.Update(dataset1,"tableName");
ولی تغییرات رو در DataGrid نمایش می دهد.

مگر اینکه دستی داده ها رو منتقل کنم. یعنی:

dataSet1.Tables["tableName"].Rows[1][0]=textBox1.Text;
هیچ error ای هم نمی دهد. :sad2:

Delphi-Clinic
سه شنبه 10 خرداد 1384, 16:52 عصر
چرا از Stored Procedure استفاده نمی کنی؟

kati
چهارشنبه 11 خرداد 1384, 11:04 صبح
چه جوری می تونم از Store Procure استفاده کنم؟
(من فقط می خواهم تغییراتی که در dataset شده رو Update کنم.)

Delphi-Clinic
چهارشنبه 11 خرداد 1384, 12:20 عصر
سلام

مثال stored procedure



CREATE PROCEDURE UpdateProduct
@OldProductID int,
@NewProductName nvarchar(40),
@NewUnitPrice money,
@OldProductName nvarchar(40),
@OldUnitPrice money
AS

-- update the row in the Products table
UPDATE Products
SET
ProductName = @NewProductName,
UnitPrice = @NewUnitPrice
WHERE ProductID = @OldProductID
AND ProductName = @OldProductName
AND UnitPrice = @OldUnitPrice



روش استفاده:


public static void ModifyDataRow(
DataTable myDataTable,
int productID,
SqlDataAdapter mySqlDataAdapter,
SqlConnection mySqlConnection
)
{
Console.WriteLine("\nIn ModifyDataRow()");

// step 1: set the PrimaryKey property of the DataTable
myDataTable.PrimaryKey =
new DataColumn[]
{
myDataTable.Columns["ProductID"]
};

// step 2: use the Find() method to locate the DataRow
// in the DataTable using the primary key value
DataRow myEditDataRow = myDataTable.Rows.Find(productID);

// step 3: change the DataColumn values of the DataRow
myEditDataRow["ProductName"] = "Advanced Widget";
myEditDataRow["UnitPrice"] = 24.99;
Console.WriteLine("myEditDataRow.RowState = " +
myEditDataRow.RowState);
Console.WriteLine("myEditDataRow[\" ProductID\", " +
"DataRowVersion.Original] = " +
myEditDataRow["ProductID", DataRowVersion.Original]);
Console.WriteLine("myEditDataRow[\" ProductName\", " +
"DataRowVersion.Original] = " +
myEditDataRow["ProductName", DataRowVersion.Original]);
Console.WriteLine("myEditDataRow[\" UnitPrice\", " +
"DataRowVersion.Original] = " +
myEditDataRow["UnitPrice", DataRowVersion.Original]);
Console.WriteLine("myEditDataRow[\" ProductName\", " +
"DataRowVersion.Current] = " +
myEditDataRow["ProductName", DataRowVersion.Current]);
Console.WriteLine("myEditDataRow[\" UnitPrice\", " +
"DataRowVersion.Current] = " +
myEditDataRow["UnitPrice", DataRowVersion.Current]);

// step 4: use the Update() method to push the update
// to the database
Console.WriteLine("Calling mySqlDataAdapter.Update()");
mySqlConnection.Open();
int numOfRows = mySqlDataAdapter.Update(myDataTable);
mySqlConnection.Close();
Console.WriteLine("numOfRows = " + numOfRows);
Console.WriteLine("myEditDataRow.RowState = " +
myEditDataRow.RowState);

DisplayDataRow(myEditDataRow, myDataTable);
}

Arya Lee
چهارشنبه 11 خرداد 1384, 14:10 عصر
بایستی از شی BindingManagerBase استفاده کنید، یعنی پیش از Update کردن باید مقدار فیلدهای تغییر یافته به DataSet انتقال یابد. اگر فرض کنیم که نام DataAdapter شما da و نام DataSet شما ds و نام DataTable درون آن table1 باشد، برای Update کردن کد زیر را بنویسید:


this.BindingContext[ ds, "table1" ].EndCurrentEdit();
da.Update( ds, "table1" );


برای اطلاعات بیشتر به MSDN، کلاس BindingManagerBase مراجعه کنید.

سربلند باشید.

kati
پنج شنبه 12 خرداد 1384, 08:41 صبح
سلام
از راهنماییتان ممنونم. درست شد. :wink:
با تشکر فراوان :flower:

adabyron
یک شنبه 21 آبان 1385, 15:26 عصر
سلام . اگر بخوایم یک فیلد خاص از جدولمونو ویرایش کنیم چی؟ مثلا فیلد name رکوردی که آیدیش برابر 1 هست رو برابر یک مقدار رشته ای مثلا "adabyron" قرار بدیم . ممنون میشم اگر کمکم کنید با تشکر