دسته بندی ها
13:47 1398/11/10

عدم اتصال به بانک اطلاعاتی و نشان ندادن اطلاعات در دیتاگرید

مشخصات سوال کننده :
کاربر : rezaftvt     امتیاز کاربر : 0     رتبه کاربر : 7109
دسته بندی : سی شارپ

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 2785
هوش مصنوعی

پاسخ هوش مصنوعی

به نظر می رسد که برای ایجاد خطای سینتکس، ممکن است که در کد شما یک علامت نقل قول (quotation mark) باز یا بسته مورد نیاز وجود نداشته باشد. در کدهای شما، در تابع SearchStatement که SQL را آماده می کند، یک مشکل احتمالی وجود دارد. در انتهای رشته ای که تاریخ را می سازد، پس از مشاهدۀ تاریخ شروع و پایان، باید توجه کنید که فاصله ای در اطراف عبارت "And" وجود دارد.

دستور صحیح باید به این شکل باشد:

private string SearchStatement()
{
    string searchstring = "and UserStartDate Between '" + string.Format("{0:yyyy/MM/dd}",
    Convert.ToDateTime(calendar_az.Text)) + "' And '" + string.Format("{0:yyyy/MM/dd}",
    Convert.ToDateTime(calendar_ta.Text)) + "'"; // اضافه کردن '+' در انتها
    if (txt_name.Text != "")
    {
        searchstring += " and CustomerName Like '%" + txt_name.Text.Trim() + "%'";
    }
    if (txt_family.Text != "")
    {
        searchstring += " and CustomerFamily Like '%" + txt_family.Text.Trim() + "%'";
    }

    return searchstring;
}

در خطی که searchstring برای تاریخ ها را می سازد، باید دقت کنید که بعد از کلمه "And" و قبل از نقل قول بسته یک فاصله داشته باشد. همچنین در کد رشته، مطمین شوید که علامت نقل قول به درستی بسته شده است.

پس از انجام این تغییرات، دوباره برنامه را اجرا کنید و بررسی کنید که آیا هنوز این ارور را دریافت می کنید یا خیر.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 14:50 1398/11/10

بنظرم یک اشکالی که در کدهای شما وجود داره اینه که توی ساختن کوئری فاصله (space) رو به خوبی نذاشتید.

مثلا در کد زیر

 

 var query = database.Database.SqlQuery<Vw_Customer>("Select * From Vw_Customer where 1=1" +

 

بعد از 1=1 باید یک فاصله بذارید. یا در کد زیر

string searchstring = "and UserStartDate Between '" + string.Format("{0:yyyy/MM/dd}",

 

قبل از کلمه and و در انتهای کوئری باید فاصله بذارید. یا مثلا کد زیر

 

   if (txt_family.Text != "")
            {
                searchstring += "and CustomerFamily Like '%" + txt_family.Text.Trim() + "%'";
            }

 

دوباره قبل از and فاصله نذاشتید

این باعث میشه وقتی کوئری شما ایجاد میشه دستورات Sql به هم بچسبن و عملا کوئری خراب بشه. توی ساختن کوئری این اشکال رو خیلی زیاد مشاهده می کنم.

به این پاسخ امتیاز بدهید    1
امتیاز: 1664 رتبه: 1
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود