none
怎么解决插入操作丢失数据的问题 RRS feed

  • 问题

  • 有个表(产品)有一列(编号)  类型为 varchar(10)

    另有一个Excel文件,也有一列(编号),内容如下

    A1
    A21
    9
    A3

    将这个Excel文件上传到SQL产品表时,除了第三行(9)被丢弃了,其他行上传成功,,,后来发现是因为第三行是数字格式,只要改成文本格式就行
    问,有什么办法在不花费时间修改EXCEL格式的情况下,让所有数据都能上传成功  或者  有什么办法在上传过程中提示说数据有丢失


    不吝赐教
    2010年3月3日 9:10

答案

  • 這與excel判斷類型有關。
    樓主用的是什麼方法導入?

    如果是用openrowset/OPENDATASOURCE時

    加上IMEX=1;

    如:
    select
    *
    from
    openrowset('Microsoft.Jet.OLEDB.4.0','EXCEL 8.0;HDR=YES;User id=admin;Password=;IMEX=1;
    DATABASE=D:\roy.xls', Sheet1$) a

    ROY WU(吳熹)
    2010年3月3日 9:37
    版主
  • 可以在连接串中加入 HDR=YES;IMEX=1

    试了一个,,可行
    不吝赐教
    HDR=YES;--這是設置第一行為列名
    IMEX=1--默認情況下是根據前8行判斷類型,可以通過注冊表設置判斷的行數
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Jet\4.0\Engines\Excel(TypeGuessRows設置判斷行)

    模式
    0 is Export mode
    1 is Import mode
    2 is Linked mode (full update capabilities)
    

    樓主的問題,只需要把Excel重新生成一個臨時表,再比較導入的數據,把沒有的新增到數據庫就行了

    ROY WU(吳熹 )
    2010年3月3日 10:02
    版主

全部回复

  • 可以在连接串中加入 HDR=YES;IMEX=1

    试了一个,,

    好像还是有问题,,,
    不吝赐教
    • 已编辑 kyle.cj 2010年3月4日 7:25
    2010年3月3日 9:30
  • 這與excel判斷類型有關。
    樓主用的是什麼方法導入?

    如果是用openrowset/OPENDATASOURCE時

    加上IMEX=1;

    如:
    select
    *
    from
    openrowset('Microsoft.Jet.OLEDB.4.0','EXCEL 8.0;HDR=YES;User id=admin;Password=;IMEX=1;
    DATABASE=D:\roy.xls', Sheet1$) a

    ROY WU(吳熹)
    2010年3月3日 9:37
    版主
  • 可以在连接串中加入 HDR=YES;IMEX=1

    试了一个,,可行
    不吝赐教
    HDR=YES;--這是設置第一行為列名
    IMEX=1--默認情況下是根據前8行判斷類型,可以通過注冊表設置判斷的行數
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Jet\4.0\Engines\Excel(TypeGuessRows設置判斷行)

    模式
    0 is Export mode
    1 is Import mode
    2 is Linked mode (full update capabilities)
    

    樓主的問題,只需要把Excel重新生成一個臨時表,再比較導入的數據,把沒有的新增到數據庫就行了

    ROY WU(吳熹 )
    2010年3月3日 10:02
    版主
  • 2
    3
    A8
    9

    当通过EXCEL上传上面的内容到产品表,,,发现 “A8”反而上不去了,,,有没有"IMEX=1"都不行

    我用的是
    OleDbDataAdapter("select * from [" & Sheet & "$]", "provider=microsoft.jet.oledb.4.0;excel 8.0;HDR=YES;IMEX=1;database=" & Filename)

    有什么方法解决吗?


    不吝赐教
    2010年3月4日 7:40
  • 2
    3
    A8
    9

    当通过EXCEL上传上面的内容到产品表,,,发现 “A8”反而上不去了,,,有没有"IMEX=1"都不行

    我用的是
    OleDbDataAdapter("select * from [" & Sheet & "$]", "provider=microsoft.jet.oledb.4.0;excel 8.0;HDR=YES;IMEX=1;database=" & Filename)

    有什么方法解决吗?


    不吝赐教
    以上提供openrowset/OPENDATASOURCE 方法是在數據庫直接讀取,是可以的。
    樓主的問題測了一下沒問題,也就是左右對齊的格式而已
    注意查看:IMEX=1--默認情況下是根據前8行判斷類型,可以通過注冊表設置判斷的行數
    ROY WU(吳熹 )
    2010年3月4日 9:22
    版主