Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

System.FormatException is thown when call FirebirdSql.Data.FirebirdClient.FbCommandBuilder.DeriveParameters [DNET263] #273

Closed
firebird-automations opened this issue Aug 20, 2009 · 13 comments

Comments

@firebird-automations
Copy link

Submitted by: Pham Huu Le Quoc Phuc (phucphlq)

Votes: 1

Csla.DataPortalException: DataPortal.Update failed (System.FormatException: Input string was not in a correct format.
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.String.System.IConvertible.ToInt32(IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at System.Data.XSDSchema.HandleElementColumn(XmlSchemaElement elem, DataTable table, Boolean isBase)
at System.Data.XSDSchema.HandleParticle(XmlSchemaParticle pt, DataTable table, ArrayList tableChildren, Boolean isBase)
at System.Data.XSDSchema.HandleComplexType(XmlSchemaComplexType ct, DataTable table, ArrayList tableChildren, Boolean isNillable)
at System.Data.XSDSchema.InstantiateTable(XmlSchemaElement node, XmlSchemaComplexType typeNode, Boolean isRef)
at System.Data.XSDSchema.HandleTable(XmlSchemaElement node)
at System.Data.XSDSchema.HandleDataSet(XmlSchemaElement node, Boolean isNewDataSet)
at System.Data.XSDSchema.LoadSchema(XmlSchemaSet schemaSet, DataSet ds)
at System.Data.DataSet.ReadXSDSchema(XmlReader reader, Boolean denyResolving)
at System.Data.DataSet.ReadXml(XmlReader reader, Boolean denyResolving)
at System.Data.DataSet.ReadXml(Stream stream)
at FirebirdSql.Data.Schema.FbSchemaFactory.GetSchema(FbConnection connection, String collectionName, String[] restrictions)
at FirebirdSql.Data.FirebirdClient.FbConnectionInternal.GetSchema(String collectionName, String[] restrictions)
at FirebirdSql.Data.FirebirdClient.FbConnection.GetSchema(String collectionName, String[] restrictions)
at FirebirdSql.Data.FirebirdClient.FbConnection.GetSchema(String collectionName)
at FirebirdSql.Data.FirebirdClient.FbCommandBuilder.DeriveParameters(FbCommand command)

Commits: 8b131c7

@firebird-automations
Copy link
Author

Modified by: @cincuranet

security: Developers [ 10012 ] =>

@firebird-automations
Copy link
Author

Commented by: @cincuranet

Do you have any particular case when it fails? I'm not able to reproduce it with basic SP.

@firebird-automations
Copy link
Author

Modified by: @cincuranet

status: Open [ 1 ] => In Progress [ 3 ]

@firebird-automations
Copy link
Author

Commented by: Pham Huu Le Quoc Phuc (phucphlq)

Sorry, my english not well. This exception is thown only some machine(Windows XP SP2), then when I create a new Windows user(on Windows), exception not happened. I think it fails because Windows User change user's windows Settings(Decimal Symbol, Digit Group Symbol, ..)

@firebird-automations
Copy link
Author

Commented by: @cincuranet

OK, then I need the DDL for the procedure and what locale has been set in system.

@firebird-automations
Copy link
Author

Commented by: Pham Huu Le Quoc Phuc (phucphlq)

This exception is thown only some machine when I install for customers. And I can't know what locate has been changed in Windows Settings.
if exception is happened, all procedures are same problem. I think it not depend on procedure code.

But I send a example procedure here:
CREATE OR ALTER PROCEDURE RPT_SO_CAI_CHUNG_TU_GHI_SO(
P_LANGUAGE TYPE OF DM_SMALLINT,
P_COMPANY TYPE OF DM_ID,
P_ID TYPE OF DM_ID,
P_ACCOUNT TYPE OF DM_ID,
P_TU_NGAY TYPE OF DM_DATE,
P_DEN_NGAY TYPE OF DM_DATE)
RETURNS (
CODE TYPE OF DM_DOCUMENT_CODE,
INPUT_DATE TYPE OF DM_DATE,
CONTENT TYPE OF DM_ENTRY_CONTENT,
ACCOUNT_CODE TYPE OF DM_CODE,
BEGINNING_DEBIT TYPE OF DM_DOUBLE,
BEGINNING_CREDIT TYPE OF DM_DOUBLE,
RISING_DEBIT TYPE OF DM_DOUBLE,
RISING_CREDIT TYPE OF DM_DOUBLE,
ENDING_DEBIT TYPE OF DM_DOUBLE,
ENDING_CREDIT TYPE OF DM_DOUBLE,
NOTE TYPE OF DM_NOTE)
AS
DECLARE VARIABLE PARENT_ACCOUNT_CODE TYPE OF DM_CODE;
DECLARE VARIABLE DEBIT_ACCOUNT_CODE TYPE OF DM_CODE;
DECLARE VARIABLE CREDIT_ACCOUNT_CODE TYPE OF DM_CODE;
DECLARE VARIABLE OFFICIAL_SUM_OF_MONEY TYPE OF DM_DOUBLE;
DECLARE VARIABLE SUM_RISING_DEBIT TYPE OF DM_DOUBLE;
DECLARE VARIABLE SUM_RISING_CREDIT TYPE OF DM_DOUBLE;
DECLARE VARIABLE HAS_VALUE TYPE OF DM_BOOL;
BEGIN
HAS_VALUE = 0;

SELECT CODE
FROM ATOMS
WHERE ATOMS\.COMPANY = :P\_COMPANY AND <http://ATOMS.ID> = :P\_ACCOUNT
INTO :PARENT\_ACCOUNT\_CODE;

SELECT DEBIT, CREDIT
FROM INT\_SD\_1\_TK\_DN\_C\(:P\_COMPANY, :PARENT\_ACCOUNT\_CODE, :P\_TU\_NGAY\)
INTO :BEGINNING\_DEBIT, :BEGINNING\_CREDIT;

SUM\_RISING\_DEBIT = 0;
SUM\_RISING\_CREDIT = 0;

FOR
    SELECT RECORDED\_DOCUMENTS\.CODE, INPUT\_DATE, RECORDED\_DOCUMENT\_ENTRIES\.CONTENT, DEBIT\_ATOM\.CODE, CREDIT\_ATOM\.CODE, SUM\_OF\_MONEY, PROTON\_STRINGS\.NOTE
    FROM RECORDED\_DOCUMENTS
    JOIN RECORDED\_DOCUMENT\_ENTRIES ON RECORDED\_DOCUMENT\_ENTRIES\.COMPANY = :P\_COMPANY AND RECORDED\_DOCUMENT\_ENTRIES\.RECORDED\_DOCUMENT = RECORDED\_DOCUMENTS\.ID
    JOIN ACCOUNTS DEBIT\_ACCOUNT ON DEBIT\_ACCOUNT\.COMPANY = :P\_COMPANY AND DEBIT\_ACCOUNT\.ID = RECORDED\_DOCUMENT\_ENTRIES\.DEBIT\_ACCOUNT
    JOIN ATOMS DEBIT\_ATOM ON DEBIT\_ATOM\.COMPANY = :P\_COMPANY AND DEBIT\_ATOM\.ID = DEBIT\_ACCOUNT\.ID
    JOIN ACCOUNTS CREDIT\_ACCOUNT ON CREDIT\_ACCOUNT\.COMPANY = :P\_COMPANY AND CREDIT\_ACCOUNT\.ID = RECORDED\_DOCUMENT\_ENTRIES\.CREDIT\_ACCOUNT
    JOIN ATOMS CREDIT\_ATOM ON CREDIT\_ATOM\.COMPANY = :P\_COMPANY AND CREDIT\_ATOM\.ID = CREDIT\_ACCOUNT\.ID
    JOIN PROTON\_STRINGS ON PROTON\_STRINGS\.COMPANY = :P\_COMPANY AND PROTON\_STRINGS\.LANGUAGE = :P\_LANGUAGE AND PROTON\_STRINGS\.ID = RECORDED\_DOCUMENT\_ENTRIES\.ID
    WHERE RECORDED\_DOCUMENTS\.COMPANY = :P\_COMPANY AND RECORDED\_DOCUMENTS\.INPUT\_DATE BETWEEN :P\_TU\_NGAY AND :P\_DEN\_NGAY AND
    \(DEBIT\_ATOM\.CODE STARTING WITH :PARENT\_ACCOUNT\_CODE OR CREDIT\_ATOM\.CODE STARTING WITH :PARENT\_ACCOUNT\_CODE\)
    ORDER BY INPUT\_DATE, RECORDED\_DOCUMENTS\.CODE, DEBIT\_ATOM\.CODE, CREDIT\_ATOM\.CODE
    INTO :CODE, :INPUT\_DATE, :CONTENT, :DEBIT\_ACCOUNT\_CODE, :CREDIT\_ACCOUNT\_CODE, :OFFICIAL\_SUM\_OF\_MONEY, :NOTE
DO
BEGIN
    IF\(DEBIT\_ACCOUNT\_CODE STARTING WITH PARENT\_ACCOUNT\_CODE\)THEN
    BEGIN
        ACCOUNT\_CODE = CREDIT\_ACCOUNT\_CODE;
        RISING\_DEBIT = OFFICIAL\_SUM\_OF\_MONEY;
        RISING\_CREDIT = NULL;

        SUM\_RISING\_DEBIT = SUM\_RISING\_DEBIT \+ RISING\_DEBIT;

        ENDING\_DEBIT = BEGINNING\_DEBIT \- BEGINNING\_CREDIT \+ SUM\_RISING\_DEBIT \- SUM\_RISING\_CREDIT;
        IF\(ENDING\_DEBIT \> 0\)THEN
            ENDING\_CREDIT = 0;
        ELSE
        BEGIN
            ENDING\_CREDIT = ABS\(ENDING\_DEBIT\);
            ENDING\_DEBIT = 0;
        END

        SUSPEND;

        HAS\_VALUE = 1;
    END

    IF\(CREDIT\_ACCOUNT\_CODE STARTING WITH PARENT\_ACCOUNT\_CODE\)THEN
    BEGIN
        ACCOUNT\_CODE = DEBIT\_ACCOUNT\_CODE;
        RISING\_DEBIT = NULL;
        RISING\_CREDIT = OFFICIAL\_SUM\_OF\_MONEY;

        SUM\_RISING\_CREDIT = SUM\_RISING\_CREDIT \+ RISING\_CREDIT;

        ENDING\_DEBIT = BEGINNING\_DEBIT \- BEGINNING\_CREDIT \+ SUM\_RISING\_DEBIT \- SUM\_RISING\_CREDIT;
        IF\(ENDING\_DEBIT \> 0\)THEN
            ENDING\_CREDIT = 0;
        ELSE
        BEGIN
            ENDING\_CREDIT = ABS\(ENDING\_DEBIT\);
            ENDING\_DEBIT = 0;
        END

        SUSPEND;

        HAS\_VALUE = 1;
    END
END

IF\(HAS\_VALUE = 0\)THEN
BEGIN
    ENDING\_DEBIT = BEGINNING\_DEBIT;
    ENDING\_CREDIT = BEGINNING\_CREDIT;

    SELECT CONTENT
    FROM TEXTS
    WHERE <http://TEXTS.ID> = 1 AND TEXTS\.LANGUAGE = :P\_LANGUAGE
    INTO :CONTENT;

    SUSPEND;
END

END

@firebird-automations
Copy link
Author

Commented by: @cincuranet

If I don't know what locale is set, I cannot test the problem and fix it.

@firebird-automations
Copy link
Author

Modified by: @cincuranet

status: In Progress [ 3 ] => Closed [ 6 ]

resolution: Incomplete [ 4 ]

@firebird-automations
Copy link
Author

Commented by: Pham Huu Le Quoc Phuc (phucphlq)

In Windows XP SP3, .Net 2.0, you do:
1. Change settings in Windows XP, see picture: http://tonyvn.com/abc/DriveParameterException.png
2. Test case: call DeriveParameters and exception is throw: System.FormatException: Input string was not in a correct format.

@firebird-automations
Copy link
Author

Commented by: Pham Huu Le Quoc Phuc (phucphlq)

In step 1, you can change Negative sign symbol: from - to ',' or '@' or '~'
The same exception is throw

@firebird-automations
Copy link
Author

Modified by: @cincuranet

status: Closed [ 6 ] => Reopened [ 4 ]

resolution: Incomplete [ 4 ] =>

@firebird-automations
Copy link
Author

Commented by: @cincuranet

rev.52450

@firebird-automations
Copy link
Author

Modified by: @cincuranet

status: Reopened [ 4 ] => Resolved [ 5 ]

resolution: Fixed [ 1 ]

Fix Version: 2.6.1 [ 10400 ]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants