2011-03-17 40 views
2

我使用C#导入Excel列铸件。但CustomerOrderNR列包含这些类型的值:OleDbDataAdapter的同时导入Excel以ASP.NET

20283 
20213 
20625 
50749-50 
30687 
31975 
82253 

但是,当我执行这些代码:

string QTam = @"SELECT Date, [Serial Number], [Status Code], Description, CustomerOrderNR FROM [Sheet1$]"; 

    DataSet ds = new DataSet(); 
    OleDbDataAdapter cmd = new OleDbDataAdapter(QTam, strConn); 
    cmd.Fill(ds, "orders"); 

它在System.Double数据类型返回CustomerOrderNR列。 我想改变的数据表列的类型,但随后返回像例外:

Cannot change DataType of a column once it has data. 

无法从双在SQL语句更改列的数据类型为String?

+0

它所在Excel中列的类型?如果它是一般的,你可能想明确地将其设置为文本... – 2011-03-17 15:56:33

回答

2

我不知道如何可以强制数据类型的SQL,但你可以通过克隆数据集架构后恰克数据集中的数据类型,数据与ImportRow复制。

反倒是你应该在Excel中,如果你想要把它当作字符串有可能发生变化的数据类型为字符串。在Excel中

2

看看你的连接字符串。您可能需要包含ISAM = 1,以便excel知道如何处理混合列作为文本。

0

,如果你有场及其预期的数据类型的预定列表,我认为,这应该是最易维护的方法:

创建一个XML架构如下:

<?xml version="1.0" encoding="utf-16"?> 
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
    <xs:complexType> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:element name="Table"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Field1" type="xs:int" minOccurs="0" /> 
       <xs:element name="Field2" type="xs:string" minOccurs="0" /> 
       <xs:element name="Field3" type="xs:date" minOccurs="0" /> 
       <xs:element name="Field4" type="xs:double" minOccurs="0" /> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:choice> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

和阅读:

string query = "SELECT Field1, Field2, Field3, Field4 FROM [" + row["TABLE_NAME"].ToString() + "]"; 

DataSet ds = new DataSet(); 
ds.ReadXmlSchema(@".\MySchema.xsd"); 
OleDbDataAdapter data = new OleDbDataAdapter(query, Connection); 
data.Fill(ds); 
ds.Tables[0].TableName = row["TABLE_NAME"].ToString().Replace("$", string.Empty);` 

掣在于日期格式具有用于系统设定是有效的是在短的日期为“DD/MM/YY”

一旦设置了类型,您可以根据需要进行格式化。