2010-11-04 27 views
1

J'ai écrit un code en utilisant C# - Visual 2008- qui prend:Quels types de données SQL rechercher?

1- une feuille Excel.

2- ouvre une connexion vers Excel

3- Lit les noms de colonnes à l'aide de l'objet et la méthode OleDbDataReader GetTableSchema

4- Ajout des noms de colonnes dans une matrice

5- créé un tableau qui a les mêmes noms de colonnes que la feuille EXcel (j'ai utilisé la commande CREATE table
)

6-Puis une fois la table créée en SQL, je boucle sur les lignes excel n ajoutez les données dans sql en utilisant la commande Insérer.

Maintenant Mon problème est le suivant:

Dans la commande « create table », je dois spécifier le type de données de la colonne i.e.!.

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

Comment devrais-je résoudre ce problème? Les types de données qui excelle les colonnes peuvent-ils être les mêmes que les types de données dans SQL Server? Y a-t-il une sorte de cartographie? Sil te plait aide moi. merci

+0

Est-ce que toutes les colonnes NVarchar ne sont pas correctes? Avez-vous besoin des types de données pour correspondre au type réel des données dans Excel? – InSane

+0

Vous pouvez essayer autant que possible de trouver le type de données le plus proche dans le serveur SQL pour les données de feuille de calcul Excel. Il sera plus facile pour vous d'exporter et, si nécessaire, d'importer à partir de SQL DB. – PradeepGB

+0

merci pour votre réponse, bien mon but est d'avoir des types de données pour correspondre au type réel des données dans Excel. Je ne peux pas utiliser le bouton d'importation. J'ai besoin d'écrire un code pour cela – PeacefulSoul

Répondre

1

OleDbDataReader.GetSchemaTable données vous donnera ce que le type de données sous-jacente est de la feuille de calcul. Ceci (citation):

Mappe au type .NET Framework de la colonne.

Vous devez ensuite mapper cela au SqlDbType approprié. Consultez this other answer pour des idées sur la façon de le faire.

L'autre point que je voulais soulever en point de mire, était de considérer le chargement en bloc des données d'Excel dans SQL Server au lieu de "lire une ligne/insérer une ligne". Je ne sais pas de quels volumes de données vous parlez, mais cela pourrait accélérer le processus.

+0

Bonjour, Eh bien, le premier lien n'a pas ouvert. et le second n'est pas quand je cherche. Je veux mapper les types de données Excel Column aux types de données Sql. :) – PeacefulSoul

+0

@PeacefulSoul - désolé, lien corrigé. Vous devriez être capable de faire ce que vous voulez de ce que GetSchemaTable renverra le type de la colonne qui correspond au type .NET - à partir de ce type de .NET, vous pouvez alors obtenir le SqlDbType équivalent par ce second lien. – AdaTheDev

+0

ok ill essayer ça. Je vous remercie :) – PeacefulSoul

0

Je crois que vous pouvez utiliser. type de données sql_variant si vous ne savez pas quel type il va être? J'y jetterai un coup d'oeil.

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

+0

J'ai les colonnes Excel, et comme Yves l'a dit, je peux utiliser ceci: DataTable schema = rdr.GetSchemaTable(); foreach (ligne DataRow dans le schéma.Rows) { foreach (Colonne DataColumn dans le schéma.Colonnes) Console.WriteLine (col.DataType); } pour obtenir les types de données de colonne. mais ma question demeure: dois-je faire une sorte de correspondance entre les types de données que je reçois d'Excel et les types de données que je devrais ajouter dans la base de données Sql? – PeacefulSoul

+0

http://msdn.microsoft.com/en-us/library/ms712640%28VS.85%29.aspx Ceci décrit comment les différents types de données Excel sont mappés à SQL et comment vous voulez les faire correspondre. Est-ce que c'est ce que vous cherchiez? –

0

Vous pouvez déterminer le type de la colonne à l'aide GetTableSchema() ...

   DataTable schema = rdr.GetSchemaTable(); 

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

Merci pour votre réponse. Tous les DataTypes d'Excel sont-ils trouvés dans Sql? Donc, si j'ajoute le col.DataType dans ma commande de création, cela fonctionnera bien ? – PeacefulSoul

+0

Vous devez traduire les types dans les types sql. Mais les types sont principalement float, integer, datetime et varchar de toute façon. –

+0

exactement ce que je veux. mais comment je fais ça? Comment puis-je savoir quel type d'Excel est traduit à quel type de SqlDatat? – PeacefulSoul