2010-11-04 2 views
1

Я написал код с использованием C# - Visual 2008-, который принимает:Какие SQL DataTypes искать?

1- лист excel.

2- открывает соединение с Excel

3- считывает имена столбцов с помощью объекта OleDbDataReader и метод GetTableSchema

4- Добавлены имена столбцов в массиве

5- создал таблицу который имеет те же имена столбцов, что и лист EXcel (я использовал таблицу CREATE
)

6-Затем, как только у меня есть таблица, созданная в SQL, я перебираю строки excel a n добавьте данные в sql, используя команду Insert.

Теперь моя проблема:

В команде «создать таблицу», я должен указать тип данных для столбца т.е.!.

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

КАК я должен решить эту проблему? Являются ли типы данных, которые превосходят столбцы, могут быть такими же, как типы данных на SQL-сервере? есть ли какое-то отображение? пожалуйста, помогите мне. спасибо

+0

Делает все столбцы NVarchar не в порядке? Вам нужны типы данных, соответствующие фактическому типу данных в excel? – InSane

+0

Вы можете как можно больше попробовать найти ближайший тип данных на SQL-сервере для данных Excel Spreadsheet. Вам будет проще экспортировать и при необходимости импортировать из SQL DB. – PradeepGB

+0

спасибо за ур ответ, ну, моя цель состоит в том, чтобы иметь типы данных, соответствующие фактическому типу данных в excel. Я не могу использовать кнопку импорта. Мне нужно написать код для него – PeacefulSoul

ответ

1

OleDbDataReader.GetSchemaTable даст вам то, что базовый тип данных из таблицы. Это (цитата):

Карты типа .NET Framework для столбца.

Затем вам необходимо сопоставить это с соответствующим типом SqlDbType. Обратитесь к this other answer за идеи о том, как это сделать.

Другой момент, который я хотел поднять в качестве боковой точки, состоял в том, чтобы рассмотреть возможность загрузки данных из excel в SQL Server вместо «читать строку/вставлять строку». Я не знаю, какие объемы данных вы говорите, но это может ускорить процесс.

+0

Здравствуйте, ну первая ссылка не открылась. и второе не то, что им нужно. Я хочу сопоставить типы данных столбцов Excel для типов данных Sql. :) – PeacefulSoul

+0

@PeacefulSoul - извините, ссылка исправлена. Вы должны иметь возможность делать то, что хотите от этого, поскольку GetSchemaTable вернет тип столбца, который сопоставляется с типом .NET - из этого типа .NET вы можете перейти к эквивалентному SqlDbType для этой второй ссылки. – AdaTheDev

+0

OK плохой попытка это. Спасибо :) – PeacefulSoul

0

Я считаю, вы можете использовать. sql_variant, если вы не знаете, какой он будет? Я бы посмотрел на это.

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

+0

У меня есть колонки excel, и, как сказал Ив, я могу использовать это: DataTable schema = rdr.GetSchemaTable(); foreach (строка DataRow в schema.Rows) { foreach (DataColumn col в схеме.Столбцы) Console.WriteLine (col.DataType); } , чтобы получить столбцы типов данных. но мой вопрос остается: я должен выполнить какое-то соответствие между типами данных, которые я получаю от excel и Datatypes, которые я должен фактически добавить в базу данных Sql? – PeacefulSoul

+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

Благодарим вас за ответ. Все ли DataTypes Excel найдены в Sql? Поэтому, если я добавлю col.DataType в мою команду Create, он будет работать нормально ? – PeacefulSoul

+0

Вам нужно перевести типы в типы sql. Но типы в основном - float, integer, datetime и varchar. –

+0

точно, что я хочу. но как это сделать? как узнать, какой тип Excel переводится на SqlDatatype? – PeacefulSoul