PDA

View Full Version : حرفه ای: عدم دریافت مقدار boolean از datatable برای قرار دادن روی دکمه



kaka2438
سه شنبه 04 آذر 1393, 17:29 عصر
public void permisson(string username)
{
DataTable dt = new DataTable();
da.connect();
//string sql = "select * from Tbl_MyUser where UserName='{0}'";
string sql = "select * from Tbl_MyUser where UserName= '" + username + "' ";
sql = string.Format(sql, username);
dt = da.select(sql);
da.disconnet();
Chap1 = Convert.ToBoolean(dt.Rows[0][1]);
Chap = Convert.ToBoolean(dt.Rows[0]["Chap"].ToString());
Namayesh = Convert.ToBoolean(dt.Rows[0]["Namayesh"].ToString());
UserPass = Convert.ToBoolean(dt.Rows[0]["UserPass"].ToString());
Kharid = Convert.ToBoolean(dt.Rows[0]["Kharid"].ToString());
Forosh = Convert.ToBoolean(dt.Rows[0]["Forosh"].ToString());
}



برای گرفتن مقدار بولین از داخل دیتا تیبل برای فرستادن به متغییر خطاهای زیر رو میده



Object cannot be cast from DBNull to other types.




String was not recognized as a valid Boolean


مشکل از کجاست؟

Jean Reno
چهارشنبه 05 آذر 1393, 11:46 صبح
علت اینه که مقدار یکی از این فیلدهات Null هستش و امکان تبدیل به بولین وجود نداره
قبل از تبدیل باید بررسی کنی که Null نباشه

در ضمن اگه مقدار یکی از فیلدها هم Null باشه قابلیت ToString کردن رو هم نداره پس این عبارت رو از انتهای فیلدهات حذف کن




if(dt.Rows[0][1]!=null)
Chap1 = Convert.ToBoolean(dt.Rows[0][1]);

if(dt.Rows[0]["Chap"]!=null)
Chap = Convert.ToBoolean(dt.Rows[0]["Chap"]);

if(dt.Rows[0]["Namayesh"]!=null)
Namayesh = Convert.ToBoolean(dt.Rows[0]["Namayesh"]);

if(dt.Rows[0]["UserPass"]!=null)
UserPass = Convert.ToBoolean(dt.Rows[0]["UserPass"]);

if(dt.Rows[0]["Kharid"]!=null)
Kharid = Convert.ToBoolean(dt.Rows[0]["Kharid"]);

if(dt.Rows[0]["Forosh"]!=null)
Forosh = Convert.ToBoolean(dt.Rows[0]["Forosh"]);

kaka2438
چهارشنبه 05 آذر 1393, 17:38 عصر
دوست عزیز بازم مشکل حل نشد
مقدار فیبد ها null نیست
خطای
Object cannot be cast from DBNull to other types.
میده
کمک کنید لطفا

ghossein
چهارشنبه 05 آذر 1393, 22:08 عصر
سلام

نکته که آقای Jean Reno مطرح کردن درسته.
یه بار برنامه رو خط به خط Trace کن ببین اصلا دیتا تیبل پر میشه یا نه؟

kaka2438
چهارشنبه 05 آذر 1393, 22:41 عصر
سلام خدمت شما
اره
دیتا تیبل پر میشه
http://www.uploadco.ir/uploads/g9t1qbv46h80nywt7569.rar
http://www.uploadco.ir/uploads/v7kfc2gjjvzbbdpammkh.rar
دارم قاطی مبکنم
دمتون گرم کمک کنید

محمد آشتیانی
پنج شنبه 06 آذر 1393, 02:14 صبح
سلام
مسئله اینجاست که null با DBNull دو تا چیز متفاوت هستن
بررسی null بودن مقدار یک فیلد با DBNull.Value امکان پذیره.

بنابراین راهنمایی که دوستمون Jean Reno کردن به این ترتیب باید اصلاح بشه


if(dt.Rows[0][1]!=System.DBNull.Value)
Chap1 = Convert.ToBoolean(dt.Rows[0][1]);
if(dt.Rows[0]["Chap"]!=System.DBNull.Value)
Chap = Convert.ToBoolean(dt.Rows[0]["Chap"]);

if(dt.Rows[0]["Namayesh"]!=System.DBNull.Value)
Namayesh = Convert.ToBoolean(dt.Rows[0]["Namayesh"]);
if(dt.Rows[0]["UserPass"]!=System.DBNull.Value)
UserPass = Convert.ToBoolean(dt.Rows[0]["UserPass"]);
if(dt.Rows[0]["Kharid"]!=System.DBNull.Value)
Kharid = Convert.ToBoolean(dt.Rows[0]["Kharid"]);
if(dt.Rows[0]["Forosh"]!=System.DBNull.Value)
Forosh = Convert.ToBoolean(dt.Rows[0]["Forosh"]);




موفق باشید