PDA

View Full Version : تعریف متغیر از نوع bit



babak23
شنبه 05 آبان 1386, 15:26 عصر
من در داخل بانک اسکول 2000 یک متغیر از نوع bit تعریف کردم متغیر معادل این نوع در سی شارپ چیست؟
میخواهم متغیری از همین نوع در سی شارپ تعریف کرده و این نوع را در داخل بانک ذخیره کنم.
البته نوع bool , enum را امتحان کردم نشد!!!؟

hassan razavi
شنبه 05 آبان 1386, 15:41 عصر
من از bool (true/false) استفاده استفاده میکنم.
کدتون را بزارید ببینیم مشکلش از کجاست

babak23
شنبه 05 آبان 1386, 15:49 عصر
bool stamper = true;
objCommand.CommandText = "INSERT INTO sefaresh " + "(s_sefaresh , date_d , onvan , tiraj , stamper , p_record , ch_ofset , ch_silc , rite , baste , date_anjam , te_ersali , date_ersal ) " + "VALUES(' " + s_sefaresh + " ' , ' " + date_d + " ' , ' " + onvan + " ' , ' " + tiraj + " ' , ' " + stamper + " ' , '0' , '1 ' , '1' , '1' , ' " + baste + " ' , ' " + date_anjam + " ' , ' " + te_ersali + " ' , ' " + date_ersal + " ' )";


این خطا را میده


Syntax error converting the varchar value ' True ' to a column of data type bit.

mehdi.mousavi
شنبه 05 آبان 1386, 19:52 عصر
سلام.
بخش قرمز رنگ رو در فرمان تصحیح کنید، ایراد رفع میشه. دقت کنید که دو Single Quote آبی رنگ هم باید حذف بشه:

objCommand.CommandText = "INSERT INTO sefaresh " + "(s_sefaresh , date_d , onvan , tiraj , stamper , p_record , ch_ofset , ch_silc , rite , baste , date_anjam , te_ersali , date_ersal ) " + "VALUES(' " + s_sefaresh + " ' , ' " + date_d + " ' , ' " + onvan + " ' , ' " + tiraj + " ' , ' " + stamper ? 1 : 0 + " ' , '0' , '1 ' , '1' , '1' , ' " + baste + " ' , ' " + date_anjam + " ' , ' " + te_ersali + " ' , ' " + date_ersal + " ' )";

پاورقی:
این نوع فراخوانی دستورات SQL، که بهش Dynamic SQL میگن صحیح نیست. بهتر این هستش که Stored Procedure ای تعریف کنید و پارامتر های مورد نیازتون رو از طریق کد به SP منتقل و سپس SP رو اجرا کنید.

babak23
یک شنبه 06 آبان 1386, 07:50 صبح
سلام.

پاورقی:
این نوع فراخوانی دستورات SQL، که بهش Dynamic SQL میگن صحیح نیست. بهتر این هستش که Stored Procedure ای تعریف کنید و پارامتر های مورد نیازتون رو از طریق کد به SP منتقل و سپس SP رو اجرا کنید.

در این مورد میشه کمی توضیح بدید
با تشکر

babak23
یک شنبه 06 آبان 1386, 08:20 صبح
سلام.
بخش قرمز رنگ رو در فرمان تصحیح کنید، ایراد رفع میشه.دقت کنید که دو Single Quote آبی رنگ هم باید حذف بشه رنگ هم باید حذف بشه:

objCommand.CommandText = "INSERT INTO sefaresh " + "(s_sefaresh , date_d , onvan , tiraj , stamper , p_record , ch_ofset , ch_silc , rite , baste , date_anjam , te_ersali , date_ersal ) " + "VALUES(' " + s_sefaresh + " ' , ' " + date_d + " ' , ' " + onvan + " ' , ' " + tiraj + " ' , ' " + stamper ? 1 : 0 + " ' , '0' , '1 ' , '1' , '1' , ' " + baste + " ' , ' " + date_anjam + " ' , ' " + te_ersali + " ' , ' " + date_ersal + " ' )";

.
متاسفانه جواب نداد
خطا مربوطه


Error 1 Cannot implicitly convert type 'string' to 'bool'
Error 2 Type of conditional expression cannot be determined because there is no implicit conversion between 'int' and 'string'


و در صورت حذف دو Single Quote آبی رنگ




objCommand.CommandText = "INSERT INTO sefaresh " + "(s_sefaresh , date_d , onvan , tiraj , stamper , p_record , ch_ofset , ch_silc , rite , baste , date_anjam , te_ersali , date_ersal ) " + "VALUES(' " + s_sefaresh + " ' , ' " + date_d + " ' , ' " + onvan + " ' , ' " + tiraj + " ' , " + stamper ? 1 : 0 + " , '0' , '1 ' , '1' , '1' , ' " + baste
+ " ' , ' " + date_anjam + " ' , ' " + te_ersali + " ' , ' " + date_ersal + " ' )";




خطای مربوطه



Error 1 Cannot implicitly convert type 'string' to 'bool'



مشکل اینجاست که از نظر syntax خطا میده و از این دستور " + stamper ? 1 : 0 + " خطای سینتکسی میگیره

SabaSabouhi
یک شنبه 06 آبان 1386, 08:50 صبح
با سلام
همیشه هنگام استفاده از « ؟: » از پرانتز استفاده کنید.



( Stamper ? '1' : '0' )



صبا صبوحى

babak23
یک شنبه 06 آبان 1386, 09:29 صبح
با تشکر از همه دوستان مشکل سینتکس حل شد اما برنامه به جواب نرسید

کد مربوطه


bool Stamper = true;
objCommand.CommandText = "INSERT INTO sefaresh " + "(s_sefaresh , date_d , onvan , tiraj , pri_record , ch_ofset , ch_silc , stamper , rite , baste , date_anjam , te_ersali , date_ersal , month1 , year1) " + "VALUES(' " + s_sefaresh + " ' , ' " + date_d + " ' , ' " + onvan + " ' , ' " + tiraj + " ' , ' " + (Stamper ?1:0) + " ' , ' " + checkBox2.Checked + " ' , ' " + checkBox3.Checked + " ' , ' " + checkBox4.Checked + " ' , ' " + checkBox5.Checked + " ' , ' " + baste + " ' , ' " + date_anjam + " ' , ' " + te_ersali + " ' , ' " + date_ersal + " ' , ' " + month + " ', ' " + year + " ')";


خطای مورد نظر


Syntax error converting the varchar value ' 1 ' to a column of data type bit.


به نظر خروجی این دستور(Stamper ?1:0) از نوع bit نیست

mehdi.mousavi
یک شنبه 06 آبان 1386, 10:23 صبح
با تشکر از همه دوستان مشکل سینتکس حل شد اما برنامه به جواب نرسید

کد مربوطه


bool Stamper = true;
objCommand.CommandText = "INSERT INTO sefaresh " + "(s_sefaresh , date_d , onvan , tiraj , pri_record , ch_ofset , ch_silc , stamper , rite , baste , date_anjam , te_ersali , date_ersal , month1 , year1) " + "VALUES(' " + s_sefaresh + " ' , ' " + date_d + " ' , ' " + onvan + " ' , ' " + tiraj + " ' , ' " + (Stamper ?1:0) + " ' , ' " + checkBox2.Checked + " ' , ' " + checkBox3.Checked + " ' , ' " + checkBox4.Checked + " ' , ' " + checkBox5.Checked + " ' , ' " + baste + " ' , ' " + date_anjam + " ' , ' " + te_ersali + " ' , ' " + date_ersal + " ' , ' " + month + " ', ' " + year + " ')";
خطای مورد نظر


Syntax error converting the varchar value ' 1 ' to a column of data type bit.
به نظر خروجی این دستور(Stamper ?1:0) از نوع bit نیست


سلام.
به پارامتر ها و ترتیب اونها در String ای که می سازید توجه کنید. شما در VALUES بعنوان پارامتر پنجم دارید Stamper رو پاس میکنید، اما در INSERT INTO پارامتر هشتم Stamper هستش، نه پنجم! در نتیجه این ایراد کاملا طبیعی هستش!

سار
یک شنبه 06 آبان 1386, 10:42 صبح
SQL مقدار True و False رو نمیفهمه(علارقم اینکه نشونش میده) باید از 0 و 1 استفاده کنی.
مثلن :

Select * From TableName Where Result = 0
و در حالت داینامیک هم :

string s = "Select * From TableName Where Result = " + (Stamper ? "1" : "0") ;

babak23
یک شنبه 06 آبان 1386, 11:16 صبح
سلام.
به پارامتر ها و ترتیب اونها در String ای که می سازید توجه کنید. شما در VALUES بعنوان پارامتر پنجم دارید Stamper رو پاس میکنید، اما در INSERT INTO پارامتر هشتم Stamper هستش، نه پنجم! در نتیجه این ایراد کاملا طبیعی هستش!

گفته های شما درسته اما دستور مورد نظر درست هست این مورد صرفا یک مثال هست

babak23
یک شنبه 06 آبان 1386, 12:07 عصر
اجازه بدید من یک مطالب را یک جمع بندی کنم.

این کد هیج مشکلی نداره و اطلاعات را داخل بانک ذخیره میکنه.



boolStamper = true;
objCommand.CommandText = "INSERT INTO sefaresh " + "(s_sefaresh , stamper ) " + "VALUES(' " + s_sefaresh + " ' , '1 ' )";


اما این کد با خطا مواجه میشه


boolStamper = true;
objCommand.CommandText = "INSERT INTOsefaresh " + "(s_sefaresh , stamper ) " + "VALUES(' " + s_sefaresh + " ' , ' " + (Stamper ? "1" : "0") + " ' )";


و همین طور این کد


boolStamper = true;
objCommand.CommandText = "INSERT INTOsefaresh " + "(s_sefaresh , stamper ) " + "VALUES(' " + s_sefaresh + " ' , ' " + (Stamper ? 1 : 0) + " ' )";


و همین طور این کد


boolStamper = true;
objCommand.CommandText = "INSERT INTOsefaresh " + "(s_sefaresh , stamper ) " + "VALUES(' " + s_sefaresh + " ' , ' " + (Stamper ? '1' : '0') + " ' )";


خطای که این کدها میدهند مشابه این مورد هست


Syntax error converting the varchar value ' 1 ' to a column of data typebit.


از نظر کد نویسی مشکلی نیست مشکل این دستور (Stamper ? '1' : '0') هست به نظر خروجی این دستور از نوع bit نیست؟
End Sub

سار
یک شنبه 06 آبان 1386, 12:23 عصر
همون خط اول رو بین عزیزم که نوشتی :

objCommand.CommandText = "INSERT INTO sefaresh " + "(s_sefaresh , stamper ) " + "VALUES(' " + Harchi + " ' , '1 ' )";

جایی رو که Bold کردم رو دقت کن.
شما داری مرتب بخش هرچی رو تغییر میدی در حالی که مشکل اساسن اون نیست.
بلکه قبل از اون هست. جایی که نوشتی ')
این سیستم بد بخت هم داره میگه که :


Syntax error converting the varchar value ' 1 ' to a column of data typebit


تو پست قبلی هم گفتم که فرم کلی استفاده در SQL چی هست اگر دقت می کردی من 0 رو تو ' یا " ننداختم.
به پست قبلی من توجه کن.
فرم اشتباه :


Declare @Exist as bit
Set @Exist = '0'

فرم صحیح :


Declare @Exist as bit
Set @Exist = 0


اون ' رو از تو رشتت حذف کن به نوشته ها هم بیشتر دقت کن (اینجا (http://barnamenevis.org/forum/showpost.php?p=413395&postcount=10) رو میگم).

babak23
یک شنبه 06 آبان 1386, 12:43 عصر
با عرض شرمندگی از تمامی بچه ها مشکل حل شد

از راهنمایی تمامی شما دوستان ممنون هستم

سار
یک شنبه 06 آبان 1386, 12:48 عصر
دقت ، دقت ، دقت و باز هم دقت.
توصیه میکنم در چنین مواردی مقدار متغییر را در خود SQL Server اجرا کنید تا بهتر به اشکال کار پی ببرید.

hassan razavi
یک شنبه 06 آبان 1386, 13:07 عصر
بابک جان چطوری حل شد. با حذف ' یا مشکل از جای دیگه ای هم بود؟

babak23
یک شنبه 06 آبان 1386, 14:07 عصر
کد به این صورت بود که با خطا مواجه می شد


' " + (Stamper ? 1 : 0) + " '


و با این کد مشکل حل شد



'" + (Stamper ? 1 : 0) + "'




البته اگه به این صورت هم بنویسیم مشکل حل میشه


" + (Stamper ? 1 : 0) + "


sql هم sql های قدیم!!!

سار
یک شنبه 06 آبان 1386, 14:17 عصر
برای مقایسه به نوع Boolean نیازی به '' نیست در صورت استفاده از '' مقایسه رشته ای صورت می گیرد.
پس بهتر از '' استفاده نکنید.

به این دقت کن :


Declare @a as bit
set @a ='65'
Select @a


خروجی 1 است. هر چیزی جز 0 حاصل یک میدهد.
ولی :


Declare @a as bit
set @a ='d'
Select @a


خطای زیر را تولید میکند :


Conversion failed when converting the varchar value 'd' to data type bit.


این دقیقن همون کاری که شما سعی به انجامش داشتید.