none
Webservice 返回dataset给外部调用,数据类型不精确 RRS feed

  • 问题

  • Webservice 返回dataset给外部调用,数据类型基本都对,但是decimal类型不对。如下:

    已知:

    1. MSSQL  表 A ,字段B decimal(8,2)

    2. webservice取数据

       sqlDataAdpter.MissingSchemaAction = MissingSchemaAction.AddWithKey;  // 控制类型  

       sqlDataAdpter.Fill(ds,"A")

       return ds;

       //?? ds.Tabels[0].Rows[0]["B"].GetType()    未知,不知道怎么看精确的长度

    3. Webservice 在IE里查看出的XML

          <xs:element name="b" type="xs:decimal" minOccurs="0" />

    4. VFP 里调用后 存入临时表

       B字段的 类型 decimal(20,19)

     

    5. 手动改XML后,VFP 临时表 里是可以显示 B字段为decimal(8,2)

                    <xs:element name="b" minOccurs="0">
                      <xs:simpleType>
                        <xs:restriction base="xs:decimal">
                          <xs:totalDigits value="7" />
                          <xs:fractionDigits value="2" />
                        </xs:restriction>
                      </xs:simpleType>                 
                    </xs:element>

    问题:

        我要怎么设置C#里的的DataSet活着adpter 才能实现数据精确对接

     

    急!!!

    谢谢

     

    2011年1月28日 3:00

答案

  • 您好,

            欢迎来到MSDN中文论坛。

            基于您的问题,在MSDN资料库中队SQL Server Decimal 类型有过这样的描述:

            默认情况下,DataSet 使用 .NET Framework 数据类型存储数据。 对于大多数应用程序,这些类型都提供了一种方便的数据源信息表示形式。 但是,当数据源中的数据类型是 SQL Server decimal 或 numeric 数据类型时,这种表示形式可能会导致问题。 .NET Framework decimal 数据类型最多允许 28 个有效位,而 SQL Server decimal 数据类型则允许 38 个有效位。 如果 SqlDataAdapter 在 Fill 操作过程中确定 SQL Server decimal 字段的精度大于 28 个字符,则不会将当前行添加到 DataTable。 此时将发生 FillError 事件,使您能够确定是否将发生精度损失并作出适当的响应。 若要获取 SQL Server decimal 值,还可以使用 SqlDataReader 对象并调用 GetSqlDecimal 方法。

    所以,建议您在修改返回值类型或者按照该文章做说的,调用GetSqlDecimal方法去处理。

    本文地址:http://msdn.microsoft.com/zh-cn/library/bh8kx08z.aspx


    Neddy Ren [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Neddy Ren 2011年2月3日 4:32
    2011年1月31日 9:50

全部回复

  • 没有人帮我么?

    2011年1月28日 12:09
  • 您好,

            欢迎来到MSDN中文论坛。

            基于您的问题,在MSDN资料库中队SQL Server Decimal 类型有过这样的描述:

            默认情况下,DataSet 使用 .NET Framework 数据类型存储数据。 对于大多数应用程序,这些类型都提供了一种方便的数据源信息表示形式。 但是,当数据源中的数据类型是 SQL Server decimal 或 numeric 数据类型时,这种表示形式可能会导致问题。 .NET Framework decimal 数据类型最多允许 28 个有效位,而 SQL Server decimal 数据类型则允许 38 个有效位。 如果 SqlDataAdapter 在 Fill 操作过程中确定 SQL Server decimal 字段的精度大于 28 个字符,则不会将当前行添加到 DataTable。 此时将发生 FillError 事件,使您能够确定是否将发生精度损失并作出适当的响应。 若要获取 SQL Server decimal 值,还可以使用 SqlDataReader 对象并调用 GetSqlDecimal 方法。

    所以,建议您在修改返回值类型或者按照该文章做说的,调用GetSqlDecimal方法去处理。

    本文地址:http://msdn.microsoft.com/zh-cn/library/bh8kx08z.aspx


    Neddy Ren [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Neddy Ren 2011年2月3日 4:32
    2011年1月31日 9:50