Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 导入的excel数据显示为科学符号_C#_Sql Server_Excel_Asp.net Core - Fatal编程技术网

C# 导入的excel数据显示为科学符号

C# 导入的excel数据显示为科学符号,c#,sql-server,excel,asp.net-core,C#,Sql Server,Excel,Asp.net Core,当我从excel中以文本形式导入数据时,它是以科学符号形式导入SQL,即使在导入过程中的所有步骤中,我都可以看到数据以文本形式显示,而没有科学符号。以下是原始文件的一个片段: 利用ExcelDataReader第三方代码(),我能够从excel文件中提取数据表并读取它。读取数据时,列和值显示为我从scratch控制台应用程序中怀疑的 当我运行负责发送到SQL的代码时,我可以在SQL分析器中看到它正在执行的SQL。我可以复制它并单独执行,然后按照我的预期导入数据。这是一个样本 declare

当我从excel中以文本形式导入数据时,它是以科学符号形式导入SQL,即使在导入过程中的所有步骤中,我都可以看到数据以文本形式显示,而没有科学符号。以下是原始文件的一个片段:

利用
ExcelDataReader
第三方代码(),我能够从excel文件中提取数据表并读取它。读取数据时,列和值显示为我从scratch控制台应用程序中怀疑的

当我运行负责发送到SQL的代码时,我可以在SQL分析器中看到它正在执行的SQL。我可以复制它并单独执行,然后按照我的预期导入数据。这是一个样本

declare @p1 dbo.ImportDataTableTest
insert into @p1 values(1623157535)
insert into @p1 values(1690205652)
insert into @p1 values(1690205654)
insert into @p1 values(1623110539)
insert into @p1 values(1623165689)
insert into @p1 values(1623165689)
insert into @p1 values(1623171209)
insert into @p1 values(1623128536)
insert into @p1 values(1623172096)

exec InsertStagingData @ImportDataTable=@p1
我的问题在正常运行应用程序后出现在这里。这是表中的结果:

InvNo           StagingID
3.22029e+009    6491
3.22028e+009    6492
3.22028e+009    6493
3.22028e+009    6494
3.22029e+009    6495
以下是我在本例中使用的scratch应用程序和sql代码:

C#

SQL:

是否有我缺少的解决方案可以将我看到的数据作为
nvarchar
字段从应用程序和探查器正确地获取到表中?我试着铸造这些值,但是导入降低了一些我需要的精度

编辑1:

我跟踪了@pcalkins提供的链接。这似乎可以解决问题,如您在此处所见:

    ALTER Procedure [dbo].[InsertStagingData]
    @ImportDataTable ImportDataTableTest readonly
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    Insert into StagingPOS([InvNo])
    select  Case When InvNo like '%e+%' or InvNo like '%e-%' then replace(cast(cast(cast([InvNo] as real) as money) as nvarchar(255)),'.00','')
    Else InvNo
    End
    from  @ImportDataTable


END

InvNo       StagingID
3220290048  8435
3220280064  8436
3220280064  8437
3220280064  8438

但是,当我将excel文件中的值查询到表中的结果时,什么也没有出现。数值在数字的不同点处四舍五入。

我建议简化您的问题。它很长,很详细,因为它的立场,这将使人们推迟阅读和回答。建议有一个“最小”、“可复制”的示例,即理解问题所需的最小信息量。事实上,所有的背景信息只会让读者更加困惑。我相信,如果有一定数量的位置,这些值会保存为Excel中的科学符号。不知道为什么它没有正确地铸造它,虽然。。。应该这样。我想这里的许多“视图”都显示了数字…(它们自己在转换,这让人困惑)也许可以尝试以下方法:@DaleK your right,为清晰起见在上面进行了编辑。看起来它是超过11个字符的任何值…(如果在Excel中设置为非字符串类型)看起来我错了。。。该数字被保存为数字,因为科学符号是该数字的缩短版本。这绝对是简写符号,而不是实际值。。。它似乎只是在为位置加上零。(?)
/****** Object:  UserDefinedTableType [dbo].[ImportDataTableTest]    Script Date: 11/19/2019 12:18:18 PM ******/
CREATE TYPE [dbo].[ImportDataTableTest] AS TABLE(
    [InvNo] [nvarchar](255) NULL
)
GO

CREATE Procedure [dbo].[InsertStagingData]
    @ImportDataTable ImportDataTableTest readonly
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    Insert into StagingPOS([InvNo])
    Select InvNo
    from  @ImportDataTable


END
GO
    ALTER Procedure [dbo].[InsertStagingData]
    @ImportDataTable ImportDataTableTest readonly
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    Insert into StagingPOS([InvNo])
    select  Case When InvNo like '%e+%' or InvNo like '%e-%' then replace(cast(cast(cast([InvNo] as real) as money) as nvarchar(255)),'.00','')
    Else InvNo
    End
    from  @ImportDataTable


END

InvNo       StagingID
3220290048  8435
3220280064  8436
3220280064  8437
3220280064  8438