C# 导入的excel数据显示为科学符号
当我从excel中以文本形式导入数据时,它是以科学符号形式导入SQL,即使在导入过程中的所有步骤中,我都可以看到数据以文本形式显示,而没有科学符号。以下是原始文件的一个片段: 利用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
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