ArgumentOutOfRangeException – Value is not valid for OracleType: 0. Parameter name: oracleType

14 בינואר 2010

תגיות: , , ,
אין תגובות

 


אם קבלתם את ההודעה הבאה:

Value is not valid for OracleType: 0. Parameter name: oracleType

 

מן הסתם כתבתם את הקוד הבא



OracleParameter param = new OracleParameter("name", 0);


 

מה שאתם צריכים לעשות זה אחד מהשניים

 



int num = 0;


OracleParameter param = new OracleParameter("name", num


 



OracleParameter param = new OracleParameter("name", Convert.ToInt32(0));


 

 

זה לא יעבוד

 



OracleParameter param = new OracleParameter("name", (int)0);


 

הסיבה לשגיאה זה הדרך שבה הם כתבו את ה – overload של הפונקציות, שימו לב: (הפונקציות איך שהם הוגדרו)

 



public OracleParameter(string name, object value);



public OracleParameter(string name, OracleType oracleType);


 

 

שני קריאות לפונקצייה

 



OracleParameter param = new OracleParameter("name", 0);


int num = 0;


OracleParameter param1 = new OracleParameter("name", num);


 

ואיך זה נראה כשפותחים Reflector

 



OracleParameter param = new OracleParameter("name", (OracleType)0);


int num = 0;


OracleParameter param1 = new OracleParameter("name", num);


 

 

כמו שאפשר לראות שליחה של הערך 0 לא מתרגמת ל – object (כמו כל שאר המספרים) אלא למופע של OracleType – מה שמוביל לשגיאה מכיוון שהמספר 0 לא קיים ב – enum.

 

למעשה גם אם נכתוב ככה:



object obj = 0;


OracleParameter param = new OracleParameter("name", obj);


 

 

ניסיתי לחקור קצת מדוע הערך 0 לא מתורגם ל object אלא ל – Enum ולא ממש הצלחתי להבין, אשמח לשמוע את הסיבה ממכם.

 

עריכה

תודה לסשה שהפנה אותי לדוקומנטציה של #C ששם כתוב

C# Language Specification, 6.1.3, Implicit Enumeration Conversions:

An implicit enumeration conversion permits the decimal-integer-literal 0 to be converted to any enum-type and to any nullable-type whose underlying type is an enum-type.

 

ותודה ללירן שהפנה אותי ל – MSDN ששם מתואר הבעייה והפיתרון.

 

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *