【问题标题】:import long number from csv into access将长数字从 csv 导入访问
【发布时间】:2015-08-20 09:04:01
【问题描述】:

我想导入 csv 文件来访问数据库,大部分数据是一个“长”数字。 问题是那些“长”数字转换为科学记数法。 在csv中说的是90049699515564500,导入后访问是9.00496995155646E+16

access 数据库 table1 我确实设置了所有列日期类型:文本,字段大小:255

这是 csv
colA,colB,colC
123123,123123,123123
90049699515564500,123123,123123

这是导入后的访问table1结果
colA,colB,colC
123123,123123,123123
9.00496995155646E+16,123123,123123

这里是 C# 代码

string strQryCommand = "INSERT INTO table1 "
                     +  "SELECT colA, colB, colC "
                     + @"FROM [Text;FMT=Delimited;HDR=YES;Database=C:\someDir].[file.csv]";

using (OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["AccessDatabase"].ConnectionString))
{
    using (OleDbCommand cmd = new OleDbCommand())
    {
        cmd.Connection = conn;
        cmd.CommandText = strQryCommand;
        conn.Open();
        cmd.ExecuteNonQuery();
        conn.Close();
    }
}

知道如何将“长”数字保存为字符串/文本吗?

【问题讨论】:

  • 我使用 SELECT Format(colA,\"#######################\") 作为 colA、colB、colC。但是,这里又来了一个问题,数字太长时数字错误,转换错误。 csv:8610592400381810,访问:8610592400381820.csv:90049699515564500,访问:90049699515564600

标签: c# csv ms-access


【解决方案1】:

尝试使用 CDec:

string strQryCommand = "INSERT INTO table1 "
                     +  "SELECT CDec(colA), colB, colC "
                     + @"FROM [Text;FMT=Delimited;HDR=YES;Database=C:\someDir].[file.csv]";

或者在读取时使用CDec将导入后的数据进行转换。

【讨论】:

  • 它给我错误:查询表达式 CDec(ColA) 中函数使用的参数数量错误。
  • 只有一个参数,但也许你在 ColA 中有 Nulls?试试CDec(Nz(ColA),0)
  • 尝试 CDec(Nz(ColA),0) 错误:表达式中未定义函数“Nz”。尝试 CDec(IIF(IsNull(ColA),0,ColA),0) 错误:溢出。
  • 那我更喜欢:"SELECT IIf(colA Is Null, Null, CDec(colA)), colB, colC " 或者:"SELECT CDec('0' & colA), colB, colC "
【解决方案2】:

强制转换格式:

SELECT Format(colA,\"0000000000000000\") as colA, colB, colC­­­­

【讨论】:

  • 谢谢。我认为这最适合我的解决方案。我使用 # 而不是 0。 SELECT Format(colA,\"#######################\") 作为 colA, colB, colC
【解决方案3】:

在设计视图中打开表格。选择字段并将格式设置为标准。无需额外处理数据。

【讨论】:

  • M 访问?我看不到“标准”的格式。尝试在查询字符串中使用格式(ColA,“标准”),但失败了。
  • 什么查询字符串?从 Access 中打开设计视图中的表。在窗口下部的“字段属性”下的“常规”选项卡上,有一个“格式”属性。在空白处单击,将出现一个下拉按钮。打开它并选择“标准”。
【解决方案4】:

好的。我尝试了这里建议的所有方法。但是没有人真正解决我的问题,使用 Ole DB 查询导入超过 16 位的 csv 数字。这是 2 个替代解决方案,

  1. 在此过程之前按摩 csv,在这些数字上添加引号:“12345678901234567”。
  2. 使用流阅读器而不是使用 Ole DB 查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 2020-02-17
    • 2012-07-01
    • 2015-02-07
    相关资源
    最近更新 更多