PDA

View Full Version : Syntax صحیح IF NOT EXIST در این کد چی هست ؟



NasimBamdad
پنج شنبه 27 مرداد 1390, 18:52 عصر
SqlConnection cnn6 = new SqlConnection(@"Data Source=.\SQLEXPRESS;initial catalog=NoorAutomation;integrated security=true");
SqlCommand cmd6 = new SqlCommand();
cmd6.Connection = cnn6;
cnn6.Open();
cmd6.CommandText = "INSERT INTO daroo_usage(patientid,darooid,numberz) VALUES (@patientid,@darooid,@numberz)";
cmd6.Parameters.AddWithValue("@patientid", textBox113.Text);
cmd6.Parameters.AddWithValue("@darooid", comboBox3.SelectedValue);
cmd6.Parameters.AddWithValue("@numberz", textBox109.Text);
cmd6.ExecuteNonQuery();
MessageBox.Show("افزودن با موفقیت انجام شد");
cnn6.Close();

اگه بخواهم از IF NOT EXIST ( برای جلوگیری در اضافه کردن داده های تکراری ) استفاده کنم ، دقیقا چه طوری باید توشت ؟

سعی کردم اما خطا های بسیاری می داد

شرط ما هم textbox113 هست که مقدار شماره پرونده که یک واحد یکتا می باشد

cccccccccc
پنج شنبه 27 مرداد 1390, 19:24 عصر
if not exist(select code from tbl where code=@code)
begin
insert .....
return 1
end
else
return -1


1 یعنی درج شد
-1 یعنی کد تکراری بود

NasimBamdad
یک شنبه 06 شهریور 1390, 16:23 عصر
if not exist(select code from tbl where code=@code)
begin
insert .....
return 1
end
else
return -1


1 یعنی درج شد
-1 یعنی کد تکراری بود

این الان دستور C# هست ؟ متودی به اسم NOT اصلا وجود نداره در این دستور C#

ممنون میشم بیشتر راهنمایی کنید

//Daroo_Usage_INS
SqlConnection cnn6 = new SqlConnection(@"Data Source=.\SQLEXPRESS;initial catalog=NoorAutomation;integrated security=true");
SqlCommand cmd6 = new SqlCommand();
cmd6.Connection = cnn6;
cnn6.Open();
cmd6.CommandText = "if not exists (select * from daroo_usage) BEGIN INSERT INTO daroo_usage(patientid,darooid,numberz) VALUES (@patientid,@darooid,@numberz) end";
cmd6.Parameters.AddWithValue("@patientid", textBox113.Text);
cmd6.Parameters.AddWithValue("@darooid", comboBox3.SelectedValue);
cmd6.Parameters.AddWithValue("@numberz", textBox109.Text);
cmd6.ExecuteNonQuery();
MessageBox.Show("افزودن دارو انجام شد");
cnn6.Close();


من این دستور رو نوشتم و به خوبی کار می کنه ، یعنی میگه افزودن دارو انجام شد ( به خاطر اون MessageBOX هست که نوشتم ) اما دارو تکراری رو یعنی داده تکراری رو اضافه نمی کنه .

اما زمانی که به صورت زیر می نویسم ERROR ممی ده که





A RETURN statement with a return value cannot be used in this context.
A RETURN statement with a return value cannot be used in this context.







//Daroo_Usage_INS
SqlConnection cnn6 = new SqlConnection(@"Data Source=.\SQLEXPRESS;initial catalog=NoorAutomation;integrated security=true");
SqlCommand cmd6 = new SqlCommand();
cmd6.Connection = cnn6;
cnn6.Open();
cmd6.CommandText = "if not exists (select * from daroo_usage) BEGIN INSERT INTO daroo_usage(patientid,darooid,numberz) VALUES (@patientid,@darooid,@numberz) return 1 end else return 2";
cmd6.Parameters.AddWithValue("@patientid", textBox113.Text);
cmd6.Parameters.AddWithValue("@darooid", comboBox3.SelectedValue);
cmd6.Parameters.AddWithValue("@numberz", textBox109.Text);
cmd6.ExecuteNonQuery();
MessageBox.Show("افزودن دارو انجام شد");
cnn6.Close();

ممنون میشم کمک کنید که بشه قسمتی بهش اضافه بشه که اگه داده تکراری بود پیغام خطا منوط بر تکراری بودن بده ، و اگه تکرار نبود که اضافه بشه و پیغام صحیی بده .

Rejnev
شنبه 12 شهریور 1390, 13:23 عصر
ExecuteNonQuery تعداد رکوردهایی رو که تحت تاثیر قرار میگیرن رو برمیگردونه...:

if (cmd6.ExecuteNonQuery()>0)
{
//record affected...
}
else
{
//no record affected...
}

NasimBamdad
شنبه 12 شهریور 1390, 14:09 عصر
Incorrect syntax near ')'.


این اررور رو داد


private void buttonX1_Click(object sender, EventArgs e)
{

//Daroo_Usage_INS
SqlConnection cnn6 = new SqlConnection(@"Data Source=.\SQLEXPRESS;initial catalog=NoorAutomation;integrated security=true");
SqlCommand cmd6 = new SqlCommand();
cmd6.Connection = cnn6;
cnn6.Open();
cmd6.CommandText = "if not exists (select * from daroo_usage) BEGIN INSERT INTO daroo_usage(patientid,darooid,numberz) VALUES (@patientid,@darooid,@numberz)";
cmd6.Parameters.AddWithValue("@patientid", textBox113.Text);
cmd6.Parameters.AddWithValue("@darooid", comboBox3.SelectedValue);
cmd6.Parameters.AddWithValue("@numberz", textBox109.Text);
cmd6.ExecuteNonQuery();
//MessageBox.Show("افزودن دارو انجام شد");
cnn6.Close();

if (cmd6.ExecuteNonQuery() > 0)
{
MessageBox.Show("DONE");
}
else
{
MessageBox.Show("NOT");
}
}

NasimBamdad
شنبه 12 شهریور 1390, 14:26 عصر
مشکل حل شد !

کد به این صورت تغییر یافت و انجام شد


private void buttonX1_Click(object sender, EventArgs e)
{

//Daroo_Usage_INS
SqlConnection cnn6 = new SqlConnection(@"Data Source=.\SQLEXPRESS;initial catalog=NoorAutomation;integrated security=true");
SqlCommand cmd6 = new SqlCommand();
cmd6.Connection = cnn6;
cnn6.Open();
cmd6.CommandText = "if not exists (select * from daroo_usage) BEGIN INSERT INTO daroo_usage(patientid,darooid,numberz) VALUES (@patientid,@darooid,@numberz) END";
cmd6.Parameters.AddWithValue("@patientid", textBox113.Text);
cmd6.Parameters.AddWithValue("@darooid", comboBox3.SelectedValue);
cmd6.Parameters.AddWithValue("@numberz", textBox109.Text);
cmd6.ExecuteNonQuery();
//MessageBox.Show("افزودن دارو انجام شد");


if (cmd6.ExecuteNonQuery() > 0)
{
MessageBox.Show("افزودن دارو با انجام شد");
}
else
{
MessageBox.Show("این دارو قبلا اضافه شده است");
}
cnn6.Close();
}

NasimBamdad
سه شنبه 15 شهریور 1390, 16:17 عصر
متاسفانه این قطعه کد یک مشکلی داره ، زمانی که جدول خالی باشه و هیچ رکوردی داخلش نباشه خوب کار می کنه .

یعنی اولین رکورد اضافه می شود و بعد دیگه هیچی اضافه نمیشه و در واقع قسمت else اجرا میشه ( پست شماره 6 ) .

عزیزان کسی می دونه چه طوری باید مشکل رو حل کرد ؟

در واقع مشکل از IF NOT EXISTS هست ، زمانی که به صورت زیر می نویسم مشکلی نیست و اضافه میشه ، اما کاربر می تواند داده تکراری وارد کنه .


SqlConnection cnn6 = new SqlConnection(@"Data Source=.\SQLEXPRESS;initial catalog=NoorAutomation;integrated security=true");
SqlCommand cmd6 = new SqlCommand();
cmd6.Connection = cnn6;
cnn6.Open();
cmd6.CommandText = "INSERT INTO daroo_usage(patientid,darooid,numberz) VALUES (@patientid,@darooid,@numberz)";
cmd6.Parameters.AddWithValue("@patientid", textBox113.Text);
cmd6.Parameters.AddWithValue("@darooid", comboBox3.SelectedValue);
cmd6.Parameters.AddWithValue("@numberz", textBox109.Text);
cmd6.ExecuteNonQuery();
MessageBox.Show("افزودن با موفقیت انجام شد");
cnn6.Close();




اما من لازم دارم که از ورود داده تکراری جلوگیری بشود و با یک MessageBox کاربر متوجه اشتباهش بشود ، چه راهی وجود داره ؟

حمیدرضاصادقیان
سه شنبه 15 شهریور 1390, 16:41 عصر
به این شکل بنویسید.
private void buttonX1_Click(object sender, EventArgs e)
{

//Daroo_Usage_INS
SqlConnection cnn6 = new SqlConnection(@"Data Source=.\SQLEXPRESS;initial catalog=NoorAutomation;integrated security=true");
SqlCommand cmd6 = new SqlCommand();
cmd6.Connection = cnn6;
cnn6.Open();
cmd6.CommandText = "if not exists (select Darooid from daroo_usage where Darooid=@Darooid) BEGIN INSERT INTO daroo_usage(patientid,darooid,numberz) VALUES (@patientid,@darooid,@numberz) END";
cmd6.Parameters.AddWithValue("@patientid", textBox113.Text);
cmd6.Parameters.AddWithValue("@darooid", comboBox3.SelectedValue);
cmd6.Parameters.AddWithValue("@numberz", textBox109.Text);
cmd6.ExecuteNonQuery();
//MessageBox.Show("افزودن دارو انجام شد");


if (cmd6.ExecuteNonQuery() > 0)
{
MessageBox.Show("افزودن دارو با انجام شد");
}
else
{
MessageBox.Show("این دارو قبلا اضافه شده است");
}
cnn6.Close();
}

NasimBamdad
چهارشنبه 16 شهریور 1390, 16:25 عصر
به این شکل بنویسید.
private void buttonX1_Click(object sender, EventArgs e)
{

//Daroo_Usage_INS
SqlConnection cnn6 = new SqlConnection(@"Data Source=.\SQLEXPRESS;initial catalog=NoorAutomation;integrated security=true");
SqlCommand cmd6 = new SqlCommand();
cmd6.Connection = cnn6;
cnn6.Open();
cmd6.CommandText = "if not exists (select Darooid from daroo_usage where Darooid=@Darooid) BEGIN INSERT INTO daroo_usage(patientid,darooid,numberz) VALUES (@patientid,@darooid,@numberz) END";
cmd6.Parameters.AddWithValue("@patientid", textBox113.Text);
cmd6.Parameters.AddWithValue("@darooid", comboBox3.SelectedValue);
cmd6.Parameters.AddWithValue("@numberz", textBox109.Text);
cmd6.ExecuteNonQuery();
//MessageBox.Show("افزودن دارو انجام شد");


if (cmd6.ExecuteNonQuery() > 0)
{
MessageBox.Show("افزودن دارو با انجام شد");
}
else
{
MessageBox.Show("این دارو قبلا اضافه شده است");
}
cnn6.Close();
}


متاسفانه کار نکرد ، می گم میشه با Team Viewer بیایید روی سیستم من ؟ امکانش هست ؟

NasimBamdad
چهارشنبه 16 شهریور 1390, 16:41 عصر
من کد رو به این صورت تغییر دادم و یکسری مشکلاتم حل شد !


private void button1_Click(object sender, EventArgs e)
{
//Daroo_Usage_INS
SqlConnection cnn6 = new SqlConnection(@"Data Source=.\SQLEXPRESS;initial catalog=NoorAutomation;integrated security=true");
SqlCommand cmd6 = new SqlCommand();
cmd6.Connection = cnn6;
cnn6.Open();
cmd6.CommandText = "if not exists (select * from daroo_usage where darooid=@darooid and patientid=@patientid) BEGIN INSERT INTO daroo_usage(patientid,darooid,numberz) VALUES (@patientid,@darooid,@numberz) END";
cmd6.Parameters.AddWithValue("@patientid", textBox2.Text);
cmd6.Parameters.AddWithValue("@darooid", comboBox1.SelectedValue);
cmd6.Parameters.AddWithValue("@numberz", textBox1.Text);
cmd6.ExecuteNonQuery();
//MessageBox.Show("افزودن دارو انجام شد");


if (cmd6.ExecuteNonQuery() > 0)
{
MessageBox.Show("NOT");
}
else
{
MessageBox.Show("DONE");
}
cnn6.Close();
}



select * from daroo_usage where darooid=@darooid and patientid=@patientid


SELECT رو به صورت بالا تغییر دادم ، الان همه چیز درست کار می کنه و OK هست ، ! فقط مشکلی که دارم این هست که زمانی که داروی تکراری ( داده تکراری ) ADD می کنم از طریق C# ، بازم پیغام DONE رو میده ،

اما در DataBase دیتای تکراری رو ADD نمی کنه خوشبختانه

به نظر شما مشکل کجا است ؟