naeeme
چهارشنبه 16 بهمن 1387, 08:44 صبح
من یک view در sqlserver دارم که می خوام رکوردهای اون رو در برنامه نشون بدم. خوب مسلمه که از دستور select * from view_1 استفاده می کنم و با یک data Adapter اون رو خونده و dataTable رو پر می کنم.
اما مشکلی که دارم این هست که من می دونم view من دارای رکورد هست و این view در sqlServer داره خروجی میده اما وقتی دستور select در دات نت (در حالت کامپایل) اجرا می شود، یک Exception پرتاب میشود.
دستور سازنده view:
SELECT CONVERT(smalldatetime,
CONVERT(char, DATEPART(year, [date])) + '/' +
CONVERT(char, DATEPART(month, [date])) + '/' +
CONVERT(char, DATEPART(day, [date]))) AS Day,
SUM(login_count) AS totalLogin
FROM tbl_usersLog
GROUP BY
DATEPART(year, [date]),
DATEPART(month, [date]),
DATEPART(day, [date])
پیغام Exception :
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value
دستور فراخواننده view در داخل برنامه:
SELECT * FROM View_login_daily
اما نکته قابل توجه اینکه همین برنامه با همین view و همین دستورات بر روی سرور به درستی کار می کنه!!!
----
1) دات نت به توابع مقسم تاریخ گیر میده اما به نظرم خطایی که اعلام میکنه منطقی نمیاد.
----
2) پیغام خطا مربوط به GROUP BY هست. چرا که با حذف فیلد DAY از VIEW همچنان این پیغام داده میشه.
همچنین اگر به جای DATEPART از توابع YEAR و DAY و... هم استفاده کنم، باز هم این خطا رخ میده.
--> smalldatetime با DateTime هم هیچ تفاوتی در نتیجه نداره!
----
3) من از dataReader هم استفاده کردم. تفاوتی که با dataAdapter.Fill داشت این بود که exception پرتاب نمی کرد اما HasRow برابر False بود در حالیکه این View دارای 10 رکورد بود.
----
شاید این سوال پیش بیاد «حالا که رو سرور کار میکنه چرا بهش گیر دادم؟ »
چون نمی تونم به کدی که این بازی رو دربیاره اعتماد کنم و می ترسم وقتی برنامه اجرایی شد برام دردسر ایجاد کنه!
کسی در این باره نظری داره؟؟
اما مشکلی که دارم این هست که من می دونم view من دارای رکورد هست و این view در sqlServer داره خروجی میده اما وقتی دستور select در دات نت (در حالت کامپایل) اجرا می شود، یک Exception پرتاب میشود.
دستور سازنده view:
SELECT CONVERT(smalldatetime,
CONVERT(char, DATEPART(year, [date])) + '/' +
CONVERT(char, DATEPART(month, [date])) + '/' +
CONVERT(char, DATEPART(day, [date]))) AS Day,
SUM(login_count) AS totalLogin
FROM tbl_usersLog
GROUP BY
DATEPART(year, [date]),
DATEPART(month, [date]),
DATEPART(day, [date])
پیغام Exception :
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value
دستور فراخواننده view در داخل برنامه:
SELECT * FROM View_login_daily
اما نکته قابل توجه اینکه همین برنامه با همین view و همین دستورات بر روی سرور به درستی کار می کنه!!!
----
1) دات نت به توابع مقسم تاریخ گیر میده اما به نظرم خطایی که اعلام میکنه منطقی نمیاد.
----
2) پیغام خطا مربوط به GROUP BY هست. چرا که با حذف فیلد DAY از VIEW همچنان این پیغام داده میشه.
همچنین اگر به جای DATEPART از توابع YEAR و DAY و... هم استفاده کنم، باز هم این خطا رخ میده.
--> smalldatetime با DateTime هم هیچ تفاوتی در نتیجه نداره!
----
3) من از dataReader هم استفاده کردم. تفاوتی که با dataAdapter.Fill داشت این بود که exception پرتاب نمی کرد اما HasRow برابر False بود در حالیکه این View دارای 10 رکورد بود.
----
شاید این سوال پیش بیاد «حالا که رو سرور کار میکنه چرا بهش گیر دادم؟ »
چون نمی تونم به کدی که این بازی رو دربیاره اعتماد کنم و می ترسم وقتی برنامه اجرایی شد برام دردسر ایجاد کنه!
کسی در این باره نظری داره؟؟