PDA

View Full Version : مشکل عجیب با Cm.ExecuteScalar



searchman
دوشنبه 08 بهمن 1386, 14:39 عصر
باعرض سلام
متاسفانه حواندن یک فیلد مدتی سر کارم گزاشته و با search توی فروم هم به نتیجه نرسیدم
من یک جدول دارم که با استفاده از شی command می خوام مقدار یک فیلد از یک رکورد اون رو بخونم .
Dim cnm AsNew SqlConnection("server=.;uid=sa;pwd=;database=QC;Connect Timeout=15")
Dim Cm AsNew SqlCommand("SELECT pass FROM tblunpass WHERE un=" & PrepareStr(cmbuser.Text), cnm)
cnm.Open()
Dim pass AsString
pass = Cm.ExecuteScalar()
cnm.Close()

مشکل:
من 5 تا رکورد توی این جدولم دارم که وقتی این تیکه کد رو (و کد های مشابه) اجرا می کنم تنها بر روی 2 رکورد این کد جواب می ده و دستور Cm.ExecuteScalar برای 3 رکورد دیگه nothing بر می گردونه.
از اونجایی که فکر می کنم کد مشکلی نداره پس از بانک؟اگه کمک می کنه فیلد pass رو از نوع varchar تعریف کرده ام.
پیشاپیش ممنون

mpg_of_shb
دوشنبه 08 بهمن 1386, 16:43 عصر
excutescaler فقط یک تک مفدار برمی گرداند مثل min, max, count , ... روی روکورد ها خاص
البته اگر دستور خودتون رو اینجوری بنویسید درست میشه
select top 1 pass ...

searchman
دوشنبه 08 بهمن 1386, 17:23 عصر
باتشکر
من هم با این دستور فقط یک فیلد رو می خونم. حتی با datatable هم که پیاده سازی شد همین مشکل رو داشت. و با وجود تغییراتی که گفتید مشکل همچنان باقی

hassan razavi
سه شنبه 09 بهمن 1386, 12:56 عصر
مهم خواندن فقط یک فیلد نیست ؛ متد excutescaler فقط یک مقدار را برمیگردونه نه مقدارهای یک فیلد را.
خروجی آن هم از جنس Object هست.

searchman
سه شنبه 09 بهمن 1386, 22:44 عصر
با تشکر از آقای رضوی
از اونجایی که این جدول مربوط به usernam و password کاربران است به ازای یک un قطعا تنها یک object رو بر می گردونه.
در هر حال با وجودی که از بی مشکل بودن جدول هم اطمینان داشتم دوباره جدول رو با همون مشخصات ساختم وکد مربوطه الان جواب می ده. اما هنوز نمی دونم مشکل از کجا بود؟
در هر صورت ممنونم

Chabok
پنج شنبه 11 بهمن 1386, 12:53 عصر
یک نکته در مورد ExecuteScalar :

Executes the query, and returns the first column of the first row in the result set returned by the query. Additional columns or rows are ignoredدوبله ::لبخند: شما هر چیزی که سلکت کنید فقط سطر و ستون اول که میشه اولین سلول رو برمیگردونه .

این مقدار سلکت شما هر چیزی میتونه باشه . برای مثال میتونه حاصل یکی از توابع Max,Count,... باشه .
یا مثلا کد جدید ثبت شده در عمل Insert .

یعنی اگر در آخر عمل Insert کد

Select @@Identityو یا

Select Scope_Identity()رو بنویسید و این عمل Insert توسط ExecuteScalar صورت بگیره مقدار بازگشتی از این تابع کد رکورد ثبت شده خواهد بود .

موفق باشید .