PDA

View Full Version : سوال: مشکل در ExecuteNoneQuery !!!!



barnamenevisjma
سه شنبه 14 دی 1389, 18:03 عصر
سلام
این دستور رو در نظر داشته باشید:


command.CommandText = "SELECT A_Serial FROM AgentDB WHERE A_Serial=@id";
command.Parameters.AddWithValue("@id", Id);


حالا وقتی این دستور رو با ExecuteNoneQuery() اجرا میکنم، عددی 1- برمیگرده .(با اینکه @id رو درست مقدار دهی میکنم!) دستور رو تغییر میدم: قسمت شرط رو حذفش میکنم. باز هم مقدار 1- برمیگرده.(جدولم خالی نیست.)
مشکل چیه؟

با تشکر.

ehsanara
سه شنبه 14 دی 1389, 19:02 عصر
اگه ID متغیر Int هست


cmd.Parameters.Add("@ID", SqlDbType.Int).Value = ID;


اگه String هست



cmd.Parameters.Add("@ID", SqlDbType.Int).Value = Convert.ToInt32(ID.Text);

barnamenevisjma
سه شنبه 14 دی 1389, 19:56 عصر
ممنون.
همانطور که گفته بودم، با اینکه قسمت شرط رو حذف می کنم (دیگر نیاز به پارامتر نیست و من هم اونو پاک میکنم) باز هم همین مشکل وجود داره و از اجرای دستور، مقدار 1- برمیگرده.




command.CommandText = "SELECT A_Serial FROM AgentDB";
command.ExecuteNonQuery(); // -1 will be returned

چرا اینجوریه؟

georgiaro
سه شنبه 14 دی 1389, 20:24 عصر
دستور select یک مجومعه رکورد رو بر میگردونه پس با "ExecuteNonQuery" نمیشه.
شما برای این کار یا باید از "ExecuteReader" و "SqlDataReader" استفاده کنی و سطر به سطر اطلاعات برگشتی(جدول) رو بخونی. یا از "SqlDataAdapter" و "DataSet" استفاده کنی و جدول رو مستقیم با متد "(Fill(ds" توی "DataSet" بریزی.

ehsanara
سه شنبه 14 دی 1389, 20:33 عصر
از
ExecuteReader
استفاده کن

قسمت Select این برنامه رو که نوشتم ببین شاید بتونی ازش استفاده کنی

64558

اگه خواستی تست کنی

یه Table به اسم EH درست کن و فیلد های
ID Float
Name Nvarchar
Family Nvarchar
Middle nchar
رو بساز و ConnectionString رو با مشخصات خودت تغییر بده

M.YasPro
چهارشنبه 15 دی 1389, 07:42 صبح
سلام

command.CommandText = "SELECT A_Serial FROM AgentDB WHERE A_Serial=@id";
شما وقتی A_Serial رو دارید دیگه چرا از دیتابیس می خونید؟ یه بار دیگه به کوئری تون دقت کنید .
متد NonQuery فقط دستور شما رو اجرا می کنه و محفظه ای برای نگهداری داده های بازگشتی نداره . برای نگهداری اطلاعات حاصل از اجرای کوئری باید از ExecuteReader یا متد Fill از شی DataSet یا ... استفاده کنید .
مقدار بازگشتی یا همون -1 که برای شما اتفاق افتاده تعداد رکوردهای تحت تاثیر قرار گرفته از اجرای کوئری تون هست . مثلا با اجرای یه کوئری update این مقدار برابر میشه با تعداد رکوردهای update شده .
یا به همین ترتیب insert و delete .
این مقدار حتی برای اجرای triger ها بعد از اجرای کوئری شما هم صدق می کنه . یعنی اگر شما تو جدول A یک تا رکورد درج کنی و یه تریگر برای اینزرت در جدول a باشه که اون تریگر به ازای اینزرت در جدول a یه رکورد در جدول b درج کنه ، مقدار برگشتی از متد NonQuery دو خواهد بود .
موفق باشید .

barnamenevisjma
چهارشنبه 15 دی 1389, 13:06 عصر
شما وقتی A_Serial رو دارید دیگه چرا از دیتابیس می خونید؟ یه بار دیگه به کوئری تون دقت کنید .هدف از این کوئری اینه که وجود یه سریال رو در جدول چک کنه. البته این شکل نوشتن من به این خاطره که با دستور Exist یا COUNT کار نکردم
و بخاطر عجله ای که داشتم، اینجوری نوشتمش. به هر حال ممنون.