PDA

View Full Version : سوال: مشكل در اجراي دستور executenonquery در sql express



spring69
چهارشنبه 19 اسفند 1388, 17:45 عصر
با سلام خدمت دوستان
چرا دستور executenonquery براي اجراي دستور insert و update در sql express كار نمي كنه.
من از كد زير براي اين كار استفاده مي كنم ولي بدون اينكه هيچ اروري بده كار نمي كنه.
حتي اگه يكي از فيلدها كه primry key هست رو تكراري بدم ايراد ميگيره.

SqlCommand com = new SqlCommand("NewPerson",Classes.Vars.MyConnection);
com.CommandType = CommandType.StoredProcedure;
Classes.Vars.MyConnection.Open();
com.ExecuteNonQuery();
Classes.Vars.MyConnection.Close();




البته اينم بگم كه StoredProcedure كه بكار بردم رو اگه توي خود محيط vs اجرا كنم جواب ميده. ولي با كد نويسي نه. لطفا كمك كنيد.

mehdi.mousavi
چهارشنبه 19 اسفند 1388, 17:59 عصر
سلام.
لطفا Stored Procedure خودتون رو اینجا قرار بدید تا ببینم ایراد از چی هستش.

موفق باشید.

M.YasPro
چهارشنبه 19 اسفند 1388, 18:00 عصر
سلام
executenonquery یه عدد برمیگردونه ، trace کن ببین اون عدد چنده ؟

Open-Source
چهارشنبه 19 اسفند 1388, 18:03 عصر
مگه sql express هم stored procedure داره؟؟؟؟!!!!!!!!!!!!!!!!!!!!!:متعجب:: متعجب:

spring69
چهارشنبه 19 اسفند 1388, 18:05 عصر
با تشكر از توجه شما


ALTER PROCEDURE dbo.NewPerson
@id nvarchar(50),
@name nvarchar(50),
@family nvarchar(50),
@fathername nvarchar(50),
@shsh nvarchar(50),
@shmelli nvarchar(50),
@sadere nvarchar(50),
@postcode nvarchar(50),
@adres nvarchar(50),
@pelak nvarchar(50),
@tel nvarchar(50),
@ostan nvarchar(50),
@shahr nvarchar(50)
AS
insert into tblpersons(id,[name],family,fathername,shsh
,shmelli,sadere,postcode,adres,pelak,tel,ostan,sha hr) values(@id,@name,@family,@fathername
,@shsh,@shmelli,@sadere,@postcode,@adres,@pelak,@t el,@ostan,@shahr)
RETURN


بعد با اين كدهم اون رو اجرا مي كنم


int c = 0;
SqlCommand com = new SqlCommand("select count(*) from tblpersons", Classes.Vars.MyConnection);
Classes.Vars.MyConnection.Open();
c = int.Parse(com.ExecuteScalar().ToString())+1;
Classes.Vars.MyConnection.Close();

com.CommandText = "NewPerson";
com.CommandType = CommandType.StoredProcedure;
com.Parameters.AddWithValue("@id", c.ToString());
com.Parameters.AddWithValue("@name", txtName.Text);
com.Parameters.AddWithValue("@family", txtFamily.Text);
com.Parameters.AddWithValue("@shsh", txtshsh.Text);
com.Parameters.AddWithValue("@shmelli", txtshmelli.Text);
com.Parameters.AddWithValue("@sadere", txtSadere.Text);
com.Parameters.AddWithValue("@postcode", txtCodePosti.Text);
com.Parameters.AddWithValue("@adres", txtAdres.Text);
com.Parameters.AddWithValue("@pelak", txtpelak.Text);
com.Parameters.AddWithValue("@tel", txtTel.Text);
com.Parameters.AddWithValue("@ostan", cbOstan.Text);
com.Parameters.AddWithValue("@shahr", cbShahr.Text);
com.Parameters.AddWithValue("@fathername", txtFatherName.Text);
com.CommandType = CommandType.StoredProcedure;
Classes.Vars.MyConnection.Open();
com.ExecuteNonQuery();
Classes.Vars.MyConnection.Close();

spring69
چهارشنبه 19 اسفند 1388, 18:10 عصر
executenonquery هم مقدار يك رو برميگردونه. ولي هيچي تو بانك اضافه نميشه.
من دستورات insert رو بدون storedprocedure هم نوشتم باز كار نكرد.
البته اون دستور execurescalar بالا كه براي گرفتن تعداد ركوردها به كار بردم به خوبي كار ميكنه و تعداد رو برميگردونه
لطفا راهنمايي كنيد.

mehdi.mousavi
چهارشنبه 19 اسفند 1388, 18:16 عصر
سلام.
بنظر میرسه کد مشکلی نداره.... آیا ممکنه Exception ای Throw بشه و شما Catch all کرده باشید که ایراد از دید شما مخفی بمونه؟ شما میتونید با SQL Server Profiler، بلافاصله دستوراتی که به SQL Server ارسال میشن رو Trace کنید و ببینید به چه دلیل داده ها در بانک ذخیره نمیشن. البته مطمئن نیستم که Express Edition ابزار Profiler رو داشته باشه...

در هر حال، کدی که نوشته اید اصلا جالب نیست. در واقع این کد، داره دو بار ExecuteScalar رو Call میکنه... بار اول هنگا چک کردن شرط اول if، و اگر شرط برقرار نباشه، یکبار دیگه در else شما دارید ExecuteScalar رو فراخوانی می کنید. ابتدا ExecuteScalar رو در خطی مجزا بنویسید و مقدار بازگشتی اونو به متغیری Assign کنید. سپس if...else خودتون رو روی متغیر اعمال کنید. برای پیدا کردن مشکل هم کد رو ساده کنید...

موفق باشید.

پاورقی: لطفا از این به بعد کدهایی که میذارید رو decorate کنید که کاربران بتونن راحتتر اونها رو بخونن. اگر به نوار ابزار هنگام ارسال تاپیک دقت کنید، گزینه ای وجود داره که امکان Decorate کردن رو براتون فراهم میکنه. این گزینه با علامت <> یا # نمایش داده شده.

golbafan
چهارشنبه 19 اسفند 1388, 18:24 عصر
يك ابزاري بود به نام sql-builder كه كمك ميكرد كد ها بهينه باشن و خطايي حاصل نشه

لينكشو پيدا كنم ميزارم

spring69
چهارشنبه 19 اسفند 1388, 18:35 عصر
يك ابزاري بود به نام sql-builder كه كمك ميكرد كد ها بهينه باشن و خطايي حاصل نشه

لينكشو پيدا كنم ميزارم

اخه كد هيچ مشكلي نداره و وقتي storedprocedure رو اجرا ميكنم و پارامترها رو دستي مقدار ميدم قشنگ كار ميكنه ولي وقتي داخل كد برنامه اونو فراخواني ميكنم داده اضافه نميكنه.
من هيچ sql server ديگه اي بجز اون Sql server كه خود vs2008 نصب ميكنه رو سيستمم نصب نكردم و بانكم رو هم از طريق پنجره server explorer خود vs ساختم. ميتونه مشكل از اينجا باشه؟
لطفا به من مبتدي كمك كنيد.

spring69
چهارشنبه 19 اسفند 1388, 18:45 عصر
لينك پرو‍‍ژه رو گذاشتم. لطفا دانلود كنيد و تست كنيد ببينيد مشكل از كجاست.

http://www.4shared.com/file/238291839/e3f5dfd2/CarExhibition.html

golbafan
چهارشنبه 19 اسفند 1388, 18:46 عصر
اگر از رشته ها استفاده ميكني (براي مقدار دهي در برنامه) اينكار رو نكن و برو سراغ char

spring69
چهارشنبه 19 اسفند 1388, 21:14 عصر
لطفا اگه كسي برنامه رو دانلود كرده تست كنه و جوابشو بهم بگه

Open-Source
چهارشنبه 19 اسفند 1388, 22:08 عصر
حجمش بالاست (البته برای ما Dial Up ی ها :لبخندساده:)

Himalaya
پنج شنبه 20 اسفند 1388, 00:02 صبح
http://www.elook.ir/CarExhibition.rar
این برنامه رو دانلود کن و
دیتابیست رو اتچ کن و تو کانکشن استرینگی که تو کلاس Vars نوشتم دیتاسورس خودت رو قرار بده و یوزر و پس دیتابیست رو هم وارد کن ... (خلاصه اینکه کانکشن استرینگت رو این مدلی وارد کن)... یه چیزایی هم اصلا لازم نبود که باشن، حذفشون کردم. یه چیز دیگه، اگه واسه ست کردن کانکشن استرینک از کلاسی که خودت نوشتی داری استفاده میکنی دیگه چرا همون کانکشن استرینگ ررو تو ap.config هم قرار دادی و هیچ جا ازش استفاده نکردی؟؟؟؟؟؟؟؟؟؟؟؟
تست کردم و بدون مشکل سطر ها رو به جدول newperson اضافه میکرد

spring69
پنج شنبه 20 اسفند 1388, 01:08 صبح
از خير express گذشتم و يه managment 2005 نصب كردم و مشكل حل شد.
با تشكر از دوستان.

Open-Source
پنج شنبه 20 اسفند 1388, 10:21 صبح
ولی کسی به سوال ما جواب نداد...
مگه express هم stored procedure داره؟

spring69
پنج شنبه 20 اسفند 1388, 18:07 عصر
ولی کسی به سوال ما جواب نداد...
مگه express هم stored procedure داره؟
آره عزيز چرا نداره.
حداقل مال من كه داشت.