PDA

View Full Version : بدست اوردن کلید اصلی در دستور insert



user_256
جمعه 27 اسفند 1389, 15:53 عصر
سلام دوستان من تو برنامم یک جدول دارم با سه تا فیلد id,name,famil که id کلید اصلی جدول هستش حالا یه مشکلی برام پیش امده اینکه وقتی در برنامه یک سطر جدید اضافه میکنم چطوری میتونم کلید اصلی که پایگاه داده به اون انتساب میده رو بدست بیارم؟
مثلا من کد زیر رو در #C میزنم

insert into tbl(name,famil)
values('ali','akbari')



بعد چطور بفهمم که id ان سطر چند است؟
البته بجز دستور زیر


select id
from tbl
where name='ali' and famil='akbari'

ricky22
جمعه 27 اسفند 1389, 20:41 عصر
insert into tbl(name,famil)
values('ali','akbari')



بعد چطور بفهمم که id ان سطر چند است؟
البته بجز دستور زیر


select id
from tbl
where name='ali' and famil='akbari'

شما چطوری این کدها رو تو C# اجرا می کنید ؟
این کد ها دستورات SQL هستند.
شما می تونید از SCOPE_IDENTITY() (http://msdn.microsoft.com/en-us/library/ms190315.aspx)استفاده کنید.
مثال msdn :
using System;
using System.Data;
using System.Data.OleDb;

public class Sample
{
static OleDbConnection nwindConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data Source=c:\Program Files\Microsoft Office\Office\Samples\northwind.mdb;");

public static void Main()
{
// Use the DataAdapter to fill and update the DataSet.
OleDbDataAdapter catDA = new OleDbDataAdapter("SELECT CategoryID, CategoryName FROM Categories ORDER BY CategoryID", nwindConn);

catDA.InsertCommand = new OleDbCommand("INSERT INTO Categories (CategoryName) Values(?)", nwindConn);
catDA.InsertCommand.CommandType = CommandType.Text;

catDA.InsertCommand.Parameters.Add("@CategoryName", OleDbType.Char, 15, "CategoryName");

nwindConn.Open();

// Fill the DataSet.
DataSet catDS = new DataSet();
catDA.Fill(catDS, "Categories");

// Add a new row.
DataRow newRow = catDS.Tables["Categories"].NewRow();
newRow["CategoryName"] = "New Category";
catDS.Tables["Categories"].Rows.Add(newRow);

// Include an event to fill in the Autonumber value.
catDA.RowUpdated += new OleDbRowUpdatedEventHandler(OnRowUpdated);

// Update the DataSet.
catDA.Update(catDS, "Categories");

nwindConn.Close();
}

protected static void OnRowUpdated(object sender, OleDbRowUpdatedEventArgs args)
{
// Include a variable and a command to retrieve the identity value from the Access database.
int newID = 0;
OleDbCommand idCMD = new OleDbCommand("SELECT @@IDENTITY", nwindConn);

if (args.StatementType == StatementType.Insert)
{
// Retrieve the identity value and store it in the CategoryID column.
newID = (int)idCMD.ExecuteScalar();
args.Row["CategoryID"] = newID;
}
}
}

http://msdn.microsoft.com/en-us/library/ks9f57t0%28vs.71%29.aspx