powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / дание из датаридера в дбф-ку
3 сообщений из 3, страница 1 из 1
дание из датаридера в дбф-ку
    #33561704
andrew_zak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток!
возможно - тема стара, но решения я не нашёл.
на основе
http://]
http://www.sql.ru/forum/actualthread.aspx?tid=98869

я дошел до следующего кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
		public static void SqlToDbf()
		{
			string aFileName = System.Configuration.ConfigurationSettings.AppSettings.Get("path");

			// connection string
			string con_str = System.Configuration.ConfigurationSettings.AppSettings.Get("con_str");

			// конект на базу
			System.Data.OleDb.OleDbConnection link = new OleDbConnection(con_str);
			
			link.Open();
			
			// виборка
			string sqlcmd = "exec dbo.someSP";

			System.Data.OleDb.OleDbCommand aOleDbCommand = new OleDbCommand(sqlcmd, link);

			//запомним состояние коннекта
			//ConnectionState oldConnectionState = aOleDbCommand.Connection.State;

			try
			{
				aOleDbCommand.CommandTimeout =  600 ;
				OleDbDataReader SchemeDataReader = aOleDbCommand.ExecuteReader();

				DataTable SchemeDataTable = new DataTable();
				SchemeDataTable = SchemeDataReader.GetSchemaTable();

				//формируем CREATE TABLE... и SELECT...
				string CreateCommand = "CREATE TABLE [" + Path.GetFileName(aFileName) + "] (";
				string SelectCommand = "SELECT ";

				for(int i =  0 ; i < SchemeDataReader.FieldCount; i++)
				{
					SelectCommand += SchemeDataTable.Rows[i].ToString();
					CreateCommand += SchemeDataTable.Rows[i].ToString() + " " + GetDbfFieldType(SchemeDataTable.Rows[i]);
					if (i +  1  < SchemeDataReader.FieldCount)
					{
						CreateCommand += ", ";
						SelectCommand += ", ";
					}
				}
				CreateCommand += ")";
				SelectCommand += " FROM [" + Path.GetFileName(aFileName) + "]";

				//закрываем запрос
				SchemeDataReader.Close();

				//создаем коннект для dbf
				string dbfConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Path.GetDirectoryName(aFileName) + ";Extended Properties=dBase IV;Persist Security Info=False";
				OleDbConnection dbfConnection = new OleDbConnection(dbfConnectionString);

				//запрос для создания dbf
				OleDbCommand dbfCommand = new OleDbCommand(CreateCommand, dbfConnection);

				//создаем dbf таблицу
				dbfConnection.Open();
				dbfCommand.ExecuteNonQuery();
				dbfConnection.Close();

				//теперь перекачиваем данные

				//dbf запрос
				OleDbCommand dbfSelectCommand = new OleDbCommand(SelectCommand, dbfConnection);

				//дата адаптеры
				OleDbDataAdapter OleDbAdapter = new OleDbDataAdapter(aOleDbCommand);
				OleDbDataAdapter dbfAdapter = new OleDbDataAdapter(dbfSelectCommand);

				//датасет
				DataSet tmpDataSet = new DataSet();

				//заполняем tmpDateSet
				OleDbAdapter.AcceptChangesDuringFill = false;
				OleDbAdapter.Fill(tmpDataSet, "tmpTable");

				//пишем в файл
				OleDbCommandBuilder OleDbBuilder = new OleDbCommandBuilder(dbfAdapter);
				dbfAdapter.Update(tmpDataSet, "tmpTable");

			}
			catch (Exception e) 
			{
				//				throw(e);
				string err = e.Message;
			}
			finally
			{
				link.Close();
			}
		}
глядя в бедагере на то что получяется, жду
SelectCommand:: "SELECT Column1, Column2, ... FROM [odbin.dbf]"
а получяю - структуру
SelectCommand:: "SELECT ColumnName, ColumnOrdinal, ColumnSize, NumericPrecision, NumericScale, DataType, ProviderType, IsLong, AllowDBNull, IsReadOnly, IsRowVersion, IsUnique FROM [odbin.dbf]" string
Помогите разобрать что не так? Заранее спасибо
-----------------------------------------
Все знают, что реализация некоей идеи невозможна, но вот находится человек, который этого не знает, и у него все получается! (Эйнштейн о том, как делаются открытия)
...
Рейтинг: 0 / 0
дание из датаридера в дбф-ку
    #33562273
andrew_zak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
круг неясности сузился - подскажите как получить структуру результата запроса
----------------------------------
Все знают, что реализация некоей идеи невозможна, но вот находится человек, который этого не знает, и у него все получается! (Эйнштейн о том, как делаются открытия)
...
Рейтинг: 0 / 0
дание из датаридера в дбф-ку
    #33567192
andrew_zak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача решена. выкладываю ответ на свой же вопрос - может кому пригодится. В вышеприведеном коде в цыкле - должно бить так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
				for(int i =  0 ; i < SchemeDataReader.FieldCount; i++)
				{
					SelectCommand += SchemeDataReader.GetName(i);
					CreateCommand += SchemeDataReader.GetName(i) + " " + GetDbfFieldType(SchemeDataTable.Columns[i].DataType.ToString());
					if (i +  1  < SchemeDataReader.FieldCount)
					{
						CreateCommand += ", ";
						SelectCommand += ", ";
					}
				}
в результате - формируется дбф-ка структуры ответа скл-запроса.
фиксил код, приведённый здесь http://www.sql.ru/forum/actualthread.aspx?tid=98869
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / дание из датаридера в дбф-ку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]