powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Формирование файла на основе данных SP на SQL сервере и передать юзеру.
16 сообщений из 16, страница 1 из 1
Формирование файла на основе данных SP на SQL сервере и передать юзеру.
    #32553505
Pantalone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На веб сайте делаю кнопку формирования файла данных и передача его для сохранения пользователю.
Можно ли посредством SP сформировать текстовый файл с заданным разделителем полей?
Другой вариант - в эксель можно?

Файл отдаю на ASP.NET страничке, пока не знаю как это организовать. Но для начала хорошо бы разобраться как сформировать файл. С Екселем вроде бы разобрались, осталось с текстовым. Причем запускать это дело нужно из процедуры, потому как в клиенте только процедуру получится вызвать.
Думается мне что тут надо в сторону DTS копать, а уже DTS как-то в процедуре вызывать.
Кто сталкивался с таким, подскажите как такое организовать, сам не справлюсь!
...
Рейтинг: 0 / 0
Формирование файла на основе данных SP на SQL сервере и передать юзеру.
    #32553537
Фотография Deosfen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты же будешь реализовывать на ASP.Net, поэтому ты сначала вызови SP, она тебе вернут набор записей, дальше сохрани в файл с форматированием и отдавай пользователю.
...
Рейтинг: 0 / 0
Формирование файла на основе данных SP на SQL сервере и передать юзеру.
    #32553587
Pantalone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. средствами SQL сервера этого делать не нужно? Может и ASP.NET вполне справиться?
авторона тебе вернут набор записей, дальше сохрани в файл с форматированием и отдавай пользователю.
Вот это как осуществить, если можно пример кода. Нужно в текстовый файл с выбранным символом разделителя полей и в эксель тоже.
...
Рейтинг: 0 / 0
Формирование файла на основе данных SP на SQL сервере и передать юзеру.
    #32555803
Pantalone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди помогите что ли?
...
Рейтинг: 0 / 0
Формирование файла на основе данных SP на SQL сервере и передать юзеру.
    #32555961
maxapet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего шумишь-то?!

Вот без хитростей-красивостей, решение в лоб: получаешь набор записей в DataReader; читаешь их по одной методом Read(); каждое поле приводишь к строковому типу и запихиваешь в строку, не забывая разделять их тем символом (последовательностью), который нужен; строку выводишь в файл. Повторяешь, пока Read() возвращает true.

Вот и всё. Очень просто. Также и с Excel'ем, с учётом его формата. А в принципе, Excel и текстовые файлы читает, насколько я знаю.

Или я чегой-то недогнал?
...
Рейтинг: 0 / 0
Формирование файла на основе данных SP на SQL сервере и передать юзеру.
    #32555973
maxapet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще-то, по-моему, MS SQL Server позволяет вводить/выводить таблицы в текстовом формате. Что-то такое я читал, но наверняка не знаю.
Ищите, и обрящете.
...
Рейтинг: 0 / 0
Формирование файла на основе данных SP на SQL сервере и передать юзеру.
    #32557557
Pantalone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, но я уже понял что от сервера мне нужно только получить данные, остальное правильнее возложить на клиент. Можно ли получив данные из хранимой процедуры в DataSet потом эти данные не сохраняя на диск в виде файла сразу передать клиенту как download файл? Если можно то огромная просьба прикрепить примерчик или хотя бы запостить код, сам ну никак не справляюсь.
...
Рейтинг: 0 / 0
Формирование файла на основе данных SP на SQL сервере и передать юзеру.
    #32558867
Pantalone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В эксель не выгрузить никак, это точно.
...
Рейтинг: 0 / 0
Формирование файла на основе данных SP на SQL сервере и передать юзеру.
    #32559004
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сваливаем из датасета в Кристал, Кристал экспортируем во что угодно, это что угодно отсылаем клиенту на браузер. Всё.
...
Рейтинг: 0 / 0
Формирование файла на основе данных SP на SQL сервере и передать юзеру.
    #32560991
kxmep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно это поможет. Тут правда dbf-файл создается...
...
using System.Data.SqlClient;
using System.Data.OleDb;
...
/// <summary>
/// Создание dbf файла из любого запроса, возвращающего набор данных
/// </summary>
/// <param name="aSqlCommand">Объект SqlCommand, готовый к выполнению</param>
/// <param name="aFileName">Полный путь к dbf файлу</param>
public void SqlToDbf(SqlCommand aSqlCommand, string aFileName)
{
//запомним состояние коннекта
ConnectionState oldConnectionState = aSqlCommand.Connection.State;

try
{
//пытаемся удалить файл
System.IO.File.Delete(aFileName);

//открываем коннект, если надо
if (aSqlCommand.Connection.State != ConnectionState.Open)
aSqlCommand.Connection.Open();

//открываем запрос
aSqlCommand.CommandTimeout = 600;
SqlDataReader SchemeDataReader = aSqlCommand.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 ["ColumnName"].ToString();
CreateCommand += SchemeDataTable.Rows["ColumnName"].ToString() + " " + GetDbfFieldType(SchemeDataTable.Rows);
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);

//дата адаптеры
SqlDataAdapter sqlAdapter = new SqlDataAdapter(aSqlCommand);
OleDbDataAdapter dbfAdapter = new OleDbDataAdapter(dbfSelectCommand);

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

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

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

}
catch (Exception e)
{
throw(e);
}
finally
{
//закрываем коннект, если надо
if (oldConnectionState != ConnectionState.Open)
aSqlCommand.Connection.Close();
}

}


/// <summary>
/// Возвращает тип(размер) поля, пригодный для создания dbf файла
/// </summary>
/// <param name="aField">Объект DataRow содержащие структуру поля</param>
/// <returns>Возвращает тип(размер) поля, пригодный для создания dbf файла</returns>
private string GetDbfFieldType(DataRow aField)
{
string aDataType = aField["DataType"].ToString();
int aColumnSize = Convert.ToInt32(aField["ColumnSize"]);

if (aColumnSize > 254)
aColumnSize = 254;

if (aDataType == "System.Byte[]")
return("Char(" + aColumnSize.ToString() + ")");
else if (aDataType == "System.String")
return("Char(" + aColumnSize.ToString() + ")");
else if (aDataType == "System.Boolean")
return("Logical");
else if (aDataType == "System.DateTime")
return("Date");
else if (aDataType == "System.Int16")
return("Numeric");
else if (aDataType == "System.Int32")
return("Numeric");
else if (aDataType == "System.Int64")
return("Numeric");
else if (aDataType == "System.Decimal")
return("Numeric");
else if (aDataType == "System.Double")
return("Numeric");
else if (aDataType == "System.Single")
return("Numeric");
else if (aDataType == "System.Byte")
return("Numeric");

return("Char");

}

Код: plaintext
kxmep

...
Рейтинг: 0 / 0
Формирование файла на основе данных SP на SQL сервере и передать юзеру.
    #32564931
Pantalone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, но это ужас какой-то. Проблема решилась гораздо проще. Причем без создания файлов на диске вообще.
...
Рейтинг: 0 / 0
Формирование файла на основе данных SP на SQL сервере и передать юзеру.
    #32565193
стас1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если не трудно, расскажи как
и можно ли это использовать в простом ASP?
...
Рейтинг: 0 / 0
Формирование файла на основе данных SP на SQL сервере и передать юзеру.
    #32575416
Gunduk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня тоже реализуется такая задача в интранете на простом ASP.
Страничка вызывает сохраненную процедуру на сервере MS SQL 2000,
которая возвращает селект состоящий из одной колонки. Внутри строки
данные разделены символом табуляции char(9).
Пользователь в браузере выполняет Вид - В виде HTML и получает в блокноте
нужный файл, который можно сохранить как текстовый.
В последующем такой текстовый файл прекрасно открывается Excel-ом.
...
Рейтинг: 0 / 0
Формирование файла на основе данных SP на SQL сервере и передать юзеру.
    #32579469
Pantalone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ASP.NET все это делается гораздо проще и удобнее как для разработчика, так и для пользователя, при нажатии на кнопку код вызывает хранимку и получает через нее данные, которые засовываем в DataSet, а потом из этого датасета прямо в режиме постросного чтения таблицы выбрасываем это на клиент, а пользователь видит как скачивается файл самым обычным образом.
...
Рейтинг: 0 / 0
Формирование файла на основе данных SP на SQL сервере и передать юзеру.
    #32579477
Pantalone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решение тут:
http://www.gotdotnet.ru/Forums/ASPNET/49908.aspx
остальное дело техники.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Формирование файла на основе данных SP на SQL сервере и передать юзеру.
    #33562734
andrew_zak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to kxmep
ну во первых не DataRow a DataColumn
и во-вторых, как такой код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
				for(int i =  0 ; i < SchemeDataReader.FieldCount; i++)
				{
					SelectCommand += SchemeDataTable.Columns[i].ColumnName.ToString();
					CreateCommand += SchemeDataTable.Columns[i].ToString() + " " + GetDbfFieldType(SchemeDataTable.Columns[i].DataType.GetType().ToString());
					if (i +  1  < SchemeDataReader.FieldCount)
					{
						CreateCommand += ", ";
						SelectCommand += ", ";
					}
				}
может генерировать команду селекта - ведь он вычитывает структуру а не названия полей!!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Формирование файла на основе данных SP на SQL сервере и передать юзеру.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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