PDA

View Full Version : دریافت مقدار فیلدIDENTITY پس از تولید



mohsenns5
شنبه 08 دی 1386, 02:13 صبح
یه جدول داریم که یه فیلد IDENTITY داره. چطوری میتونم هر وقت یه رکورد وارد جدول کردم، مقدار این فیلد که تولید شده
برای رکورد رو بدست بیارم.البته بدونید که این فیلد IDENTITY کلیده.و هیچ فیلد UNIQUE ی در جدولم ندارم.ممنون

sinpin
شنبه 08 دی 1386, 02:50 صبح
یه جدول داریم که یه فیلد IDENTITY داره. چطوری میتونم هر وقت یه رکورد وارد جدول کردم، مقدار این فیلد که تولید شده
برای رکورد رو بدست بیارم.البته بدونید که این فیلد IDENTITY کلیده.و هیچ فیلد UNIQUE ی در جدولم ندارم.ممنون

به این شکل از کلمه کلیدی IDENTITY در انتهای کوئری استفاده کنید :


INSERT INTO tblName(TextField, NumberField) VALUES(@Text, @Number) SELECT @@IDENTITY

MohammadSoft
شنبه 08 دی 1386, 12:35 عصر
سلام
از Scop_Identity() هم می توانید استفاده کنید .

mohsenns5
شنبه 08 دی 1386, 13:24 عصر
این تابع درجه:

public void InsCompany(string CompanyName,string SherkatType,string Address,string Tel1,string Tel2,string Fax,string Mobile,DateTime Ttasis)
{
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "InsCompany";
cmd.Parameters.AddWithValue("@CompanyName", CompanyName);
cmd.Parameters.AddWithValue("@SherkatType", SherkatType);
cmd.Parameters.AddWithValue("@Address", Address);
cmd.Parameters.AddWithValue("@Tel1", Tel1);
cmd.Parameters.AddWithValue("@Tel2", Tel2);
cmd.Parameters.AddWithValue("@Fax", Fax);
cmd.Parameters.AddWithValue("@Mobile", Mobile);
cmd.Parameters.AddWithValue("@Ttasis", Ttasis);
mycmd.Connection = myCn;
if (myCn.State == ConnectionState.Closed)
{
myCn.Open();
}
mycmd.ExecuteNonQuery();
myCn.Close();
myCn.Dispose();
}
اینطوری پارامتر ها رو ارسال میکنم:

InsCompany(txtName.Text.Trim(), txtType.Text.Trim(), txtAddress.Text.Trim(), txtTel1.Text.Trim(), txtTel2.Text.Trim(), txtFax.Text.Trim(), txtMob.Text.Trim(), mydatetime);
پروسیجرم اینه:

CREATE PROC [dbo].[InsCompany]
@CompanyName nvarchar(50),
@SherkatType nvarchar(50),
@Address nvarchar(120),
@Tel1 nvarchar(13),
@Tel2 nvarchar(13),
@Fax nvarchar(13),
@Mobile nvarchar(13),
@Ttasis smalldatetime
as
INSERT INTO [MMdb].[dbo].[TCompany]
([CompanyName]
,[SherkatType]
,[Address]
,[Tel1]
,[Tel2]
,[Fax]
,[Mobile]
,[Ttasis])
VALUES
(@CompanyName,
@SherkatType,
@Address,
@Tel1,
@Tel2,
@Fax,
@Mobile,
@Ttasis)
SELECT @@IDENTITY 'IDENTITY'
چجوری این مقدار @@IDENTITY رو بدست بیارم؟
ممنون

SabaSabouhi
یک شنبه 09 دی 1386, 11:08 صبح
با سلام
من از ('IDENT_CURRENT( 'tablename استفاده مى‌کنم.
Identity@@ یه اشکال داره و اون هم اینه که اگه فرمان Insert شما به هر دلیلى اجرا نشه و یا این که Triggerاى داشته باشى که توى اون Trigger مثلاً یک سطر به جدول Log شما اضافه کنه، مقدار Identity@@ شما مربوط به جدول دیگرى خواهد بود و شما رو گمراه مى‌کنه.
به همین دلیل استفاده از تابعى که نام جدول رو مى‌گیره دقیق‌تره.

صبا صبوحى

rmb_ali
یک شنبه 09 دی 1386, 11:45 صبح
شاید اینجا جاش نباشه ولی اگر تو یه جدولی که دیتیل یه جدول دیگه هست یه فیلد دیگه رو به ترتیب پر کنیم چیکار کنیم مثالش اینه که مثلا فیلد id کلید جدول اصلی و دیتیل ما هست علاوه بر اون فیلد tartib رو هم میخواهیم در جدول دیتیل بر اساس ردیفهای جدول مستر پر کنیم چه جوری میشه توی جدول اینو تعریف کرد؟