PDA

View Full Version : مشکل با مقداردهی به کلیداصلی



reza11_2005
سه شنبه 28 اردیبهشت 1395, 18:45 عصر
من یک سوالی دام
این کد sp من
ALTER PROCEDURE [dbo].[AddIn]
@id int,
@city nvarchar(50),
@age float
AS
SET IDENTITY_INSERT Info ON;
INSERT INTO Info (id,city,age)
VALUES (@id,@city,@age)
SET IDENTITY_INSERT Info OFF;
RETURN
حالا
این هم کد سی شارپ دکمه add
SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=Test1;Integrated Security=True");
conn.Open();
SqlCommand cmd = new SqlCommand("AddIn", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@id", SqlDbType.Int).Value= "";
cmd.Parameters.AddWithValue("@city", SqlDbType.NVarChar).Value = TextCity.Text.Trim();
cmd.Parameters.AddWithValue("@age", SqlDbType.Float).Value = TextAge.Text.Trim();
cmd.ExecuteNonQuery();
MessageBox.Show("عملیات با موفقیت انجام شد", "پیام",MessageBoxButtons.OK,MessageBoxIcon.Information);
conn.Close();
this.Close();
حالا من یک مشکلی دارم
id من به صورت خودکار شماره 1 - 2 - و... را وارد می کنند
نمی دانم چطور با این قسمت برخورد کنم هر کاری می کنم هر روشی می روم از قسمت id اخطار می گیرد
میشه بفرماید کجای کد باید اصلاح کنم

davidrobert
سه شنبه 28 اردیبهشت 1395, 19:18 عصر
سلام شما وقتی id رو روی اتوماتیک قرار میدید نباید برای id دستور ذخیره بنویسید چون شما دارید تو جای که از قبل اطلاعات هستش اطلاعات قرار میده و به همین علت سیستم به شما اجازه نمیده دستور مربوط به id رو حذف کن این دستور رو
cmd.Parameters.AddWithValue("@id", SqlDbType.Int).Value= "";
و باقی دستور ها بمونن و سیستم بدون مشکل اطلاعات رو ذخیره میکنه و خودش شماره ها رو میزنه و خطای هم نمیده

reza11_2005
سه شنبه 28 اردیبهشت 1395, 22:51 عصر
سلام
تشکر باز هم مشکل داره
Additional information: Procedure or function 'AddIn' expects parameter '@id', which was not supplied.

reza11_2005
سه شنبه 28 اردیبهشت 1395, 23:03 عصر
An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll

Additional information: Procedure or function 'AddIn' expects parameter '@id', which was not supplied.

alireza4474
چهارشنبه 29 اردیبهشت 1395, 16:18 عصر
سلام یه لطفی کن تموم کد ها رو بزار توی try catch بعد یه متغیر string تعریف کن و توی قسمت catch متغیری که بهت گفتم رو با این کد که پایین مینویسم پر کن بعد بزار اینجا تا ببینم مشکل چیه

catch(excpetion ex)
{
string a=ex.message;
}

reza11_2005
چهارشنبه 29 اردیبهشت 1395, 16:29 عصر
سلام انجام دادم
کد سی شارپ add
:
private void Bsave_Click(object sender, EventArgs e)
{
try
{
SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=Test1;Integrated Security=True");
conn.Open();
SqlCommand cmd = new SqlCommand("AddIn", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@id", SqlDbType.Int);
cmd.Parameters.AddWithValue("@city", SqlDbType.NVarChar).Value = TextCity.Text.Trim();
cmd.Parameters.AddWithValue("@age", SqlDbType.Float).Value = TextAge.Text.Trim();
cmd.ExecuteNonQuery();
MessageBox.Show("عملیات با موفقیت انجام شد", "پیام",MessageBoxButtons.OK,MessageBoxIcon.Information);
conn.Close();
this.Close();

}
catch (Exception error)
{
MessageBox.Show(error.Message);


}

sp
ALTER PROCEDURE [dbo].[AddIn]
@id int,
@city nvarchar(50),
@age float
AS
SET IDENTITY_INSERT Info ON;
INSERT INTO Info (id,city,age)
VALUES (@id,@city,@age)
SET IDENTITY_INSERT Info OFF;
RETURN



اخطار:
Additional information: Violation of PRIMARY KEY constraint 'PK_Info'. Cannot insert duplicate key in object 'dbo.Info'.

The statement has been terminated.
من فقط مشکل فقط id جدول که به صورت خودکار مقدار دهی میشه

ebrahim.rayatparvar
چهارشنبه 29 اردیبهشت 1395, 16:53 عصر
تو چرا به id مقدار میدی؟؟؟
تو پروسیجر و تو کد سی شارپ همه جا id رو پاک کن. براش مقدار نفرست.

reza11_2005
چهارشنبه 29 اردیبهشت 1395, 17:45 عصر
سلام انجام دادم باز ایراد گرفت
Additional information: Explicit value must be specified for identity column in table 'Info' either when IDENTITY_INSERT is set to ON or when a replication user is inserting into a NOT FOR REPLICATION identity column.

ebrahim.rayatparvar
چهارشنبه 29 اردیبهشت 1395, 18:03 عصر
الان پاک کردی کد جدیدت رو بفرست؟؟؟

ebrahim.rayatparvar
چهارشنبه 29 اردیبهشت 1395, 18:06 عصر
SET IDENTITY_INSERT Info ON;
SET IDENTITY_INSERT Info OFF;



این دو خط رو هم پاک کن برای چی نوشتی
مگه ستون id رو identety نگرفتی؟؟؟ نیاز به این 2 خط و مقدار دادن به ستون id نیست.

reza11_2005
چهارشنبه 29 اردیبهشت 1395, 18:28 عصر
تشکر درست شد
من این کد برای دوستان قرار می دهم شاید یکی مثل خودم با این مشکل بر خورد کند
برنامه + دیتابیس

http://s7.picofile.com/file/8251952626/Test.zip.html
http://s6.picofile.com/file/8251953050/Test1bak.zip.html
تشکر از دوستان