2010-11-04 79 views
1

我用c#編寫了一個代碼 - Visual 2008-需要:要查找哪些SQL數據類型?

1-一個excel工作表。

2-打開創建的表

3-讀取:使用OleDbDataReader對象和GetTableSchema方法

4-增補列名在陣列

5-列名到Excel的連接與EXcel工作表具有相同的列名(我使用CREATE表
命令)

6-然後,我有了在SQL中創建的表,我循環了excel行a n使用Insert命令將數據 添加到sql中。現在

我的問題是:

在「創建表」命令,我必須指定列的DATATYPE即!

CREATE TABLE "table_name" 
("column 1" "data_type_for_column_1", 
"column 2" "data_type_for_column_2", 
...) 

如何解決此問題? excel列的數據類型是否可以與SQL服務器中的數據類型相同?有沒有一些映射?請幫助我。 謝謝

+0

是否使所有列NVarchar不正常?你是否需要數據類型來匹配Excel中數據的實際類型? – InSane 2010-11-04 09:39:31

+0

您可以儘可能地嘗試在Excel電子表格數據的SQL服務器中查找最接近的數據類型。你將更容易導出,如果需要從SQL DB導入。 – PradeepGB 2010-11-04 09:41:59

+0

感謝您的回覆,以及我的目標是讓數據類型匹配Excel中數據的實際類型。我不能使用導入按鈕。我需要爲它編寫代碼 – PeacefulSoul 2010-11-04 09:47:44

回答

1

OleDbDataReader.GetSchemaTable會給你的基本數據類型是從電子表格中的內容。此(引用):

映射到.NET Framework類型的列。

然後您需要將其映射到適當的SqlDbType。查看this other answer瞭解如何做到這一點的想法。

另外一點我想提出的一個觀點是考慮將數據從Excel中批量加載到SQL Server中,而不是「讀取一行/插入一行」。我不知道你在談論什麼數據量,但可以加快這個過程。

+0

你好,第一個鏈接沒有打開。第二個不是當我在尋找時。我想將Excel列DataTypes映射到Sql數據類型。 :) – PeacefulSoul 2010-11-04 10:10:26

+0

@PeacefulSoul - 對不起,鏈接固定。你應該可以做到你想做的事情,因爲GetSchemaTable將返回映射到.NET類型的列的類型 - 從這個.NET類型,你可以得到相同的SqlDbType每第二個鏈接。 – AdaTheDev 2010-11-04 10:25:48

+0

沒問題,試試看。謝謝 :) – PeacefulSoul 2010-11-04 10:52:20

0

我相信你可以使用。 sql_variant數據類型,如果你不知道它會是什麼樣的? 我會看看那個。

http://msdn.microsoft.com/en-us/library/ms173829.aspx

+0

我有excel列,並且按照Yves的說法,我可以使用這個: DataTable schema = rdr.GetSchemaTable(); foreach(schema.Rows中的DataRow行) foreach(DataColumn col in schema。列) Console.WriteLine(col.DataType); } 獲取列數據類型。但我的問題仍然存在:我是否需要在從Excel中獲得的數據類型與我應該實際添加到Sql數據庫中的數據類型之間進行某種匹配? – PeacefulSoul 2010-11-04 09:51:05

+0

http://msdn.microsoft.com/en-us/library/ms712640%28VS.85%29.aspx這裏描述了不同的excel數據類型如何映射到SQL以及你想如何匹配它們。那是你在找什麼? – 2010-11-04 09:56:23

0

你可以計算出使用GetTableSchema()列的數據類型...

   DataTable schema = rdr.GetSchemaTable(); 

       foreach (DataRow row in schema.Rows)  
       { 
        foreach (DataColumn col in schema.Columns) 
          Console.WriteLine(col.DataType); 
       } 
+0

謝謝你的回覆。 是否在Sql中找到Excel的所有數據類型?所以如果我添加col.DataType在我的創建命令,它會正常工作 ? – PeacefulSoul 2010-11-04 09:43:39

+0

您需要將類型轉換爲sql類型。但是類型主要是float,integer,datetime和varchar。 – 2010-11-04 10:02:14

+0

正是我想要的。但我如何做到這一點?我如何知道哪個Excel類型被轉換爲哪個SqlDatatype? – PeacefulSoul 2010-11-04 10:11:14

相關問題