Когда я, наконец, закончил исследование всех различных подходов к проблеме, это было очень просто для кодирования. Я вообще не использовал BCP.
Я создал переменные для информации, которую я извлекал, что я хотел в текстовом файле.
- Имя файла
- Дата (От SQL таблицы для оригинала Дата создания)
- Номер дела (внутренний идентификатор для программы 3-й партии, чтобы связать с)
- Описание (Взято из SQL таблицы для описания документ)
Тогда я поставил приложение для работы Написание кода в PDF по одному
using (SqlConnection Conn = new SqlConnection(strSQLConn))
{
//open the connection
Conn.Open();
Console.WriteLine("the connection is open");
//Variables needed for looping
DateTime Today = System.DateTime.Now;
DateTime StartDate = Convert.ToDateTime("2008-06-11 00:00:00");
//DateTime StartDate = Today.AddDays(-10);
Console.WriteLine("Converting the Documents from " + StartDate.ToString() + " - TO - " + Today.ToString());
Console.WriteLine("Press Any Key to continue.");
Console.ReadLine();
int RecordCount = 0;
ulong ByteCount = 0;
int i = 1;
foreach (DateTime day in EachDay(StartDate, Today))
{
String strDay = day.ToString();
// Create a SQLCommand to retrieve Data
SqlCommand getRecords = new SqlCommand("spRecapturePDF", Conn);
getRecords.CommandType = CommandType.StoredProcedure;
getRecords.Parameters.Add(new SqlParameter("@OneDay", strDay));
SqlDataReader reader = getRecords.ExecuteReader();
//stuff exporting the binary code to the PDF format
FileStream fs;
BinaryWriter bw;
int buffersize = 100;
byte[] outbyte = new byte[buffersize];
long retval;
long startIndex = 0;
int j = 1;
while (reader.Read())
{
strFileName = reader.GetString(0) + "-" + i + "-" + j;
strDock_no = reader.GetString(0);
dtFiledate = reader.GetDateTime(2);
strDescription = reader.GetString(4);
fs = new FileStream("c:\\FolderName\\" + strFileName + ".pdf", FileMode.OpenOrCreate, FileAccess.Write);
bw = new BinaryWriter(fs);
startIndex = 0;
retval = reader.GetBytes(1,startIndex,outbyte,0,buffersize);
while (retval == buffersize)
{
bw.Write(outbyte);
bw.Flush();
startIndex += buffersize;
retval = reader.GetBytes(1,startIndex,outbyte,0,buffersize);
}
//write the remaining buffer.
bw.Write(outbyte,0,(int)retval);
ByteCount = ByteCount + Convert.ToUInt64(fs.Length);
bw.Flush();
//close the output file
bw.Close();
fs.Close();
//need to write to the Text file here.
TextWriter tw = new StreamWriter(path,true);
tw.WriteLine(strDock_no + "~" + dtFiledate.ToString() + "~" + "c:\\FolderName\\" + strFileName + ".pdf" + "~" + strDescription);
tw.Close();
// increment the J variable for the Next FileName
j++;
RecordCount++;
}
//close the reader and the connection
reader.Close();
i++;
}
Console.WriteLine("Number of Records Processed: " + RecordCount.ToString());
Console.WriteLine("for a Total of : " + ByteCount + " Bytes");
Decimal MByteCount = new Decimal(2);
MByteCount = Convert.ToDecimal(ByteCount)/1024/1024;
Decimal GByteCount = new Decimal(2);
GByteCount = MByteCount/1024;
Console.WriteLine("Total MBs : " + MByteCount.ToString() + " MB");
Console.WriteLine("Total GBs : " + GByteCount.ToString() + " GB");
Console.WriteLine("Press Enter to Continue ...");
Console.ReadLine();
}
настоящий Кодекс был включен в заявление foreach
, которое продолжалось день ото дня, начиная с даты начала и окончания. внутри этого foreach
заявить приложение, называемое хранимой процедурой, которому был назначен указанный день, чтобы вызвать записи, которые были введены в этот день.
переменные i
и j
были созданы потому, что мне нужно было иметь уникальное имя файла, даже если у меня был тот же номер случая. i
представлял день (потому что я каждый день ходил в своем заявлении на выбор), а j
представлял номер записи за этот день из оператора select.
foreach
и while
петли были заключены в using(conn)
, так что независимо от того, что соединение будет закрыто окончательно.
В конце цикла while я написал текстовый файл. текстовый файл был создан за пределами всех циклов, чтобы я мог просто добавить файл, а не перезаписать его. этот код:
string path = @"c:\\FolderName\\TextFile.txt";
if (!File.Exists(path))
{
TextWriter tw = new StreamWriter(path, false);
tw.WriteLine("Dock_No~Date~FileName(Location)~Description");
tw.Close();
}
Я надеюсь, что это поможет кому-то еще. Я оставил все коды Console.Writeline
и Console.ReadLine
, которые не были необходимы для функциональности, которую я искал. Я также добавил код, который бы подсчитал байты, которые были написаны, и некоторый код для подсчета обработанных записей. это просто забавный материал, который мне нужно знать, мне нужно очистить материал Fun в конце.
это кишках, что потребовалось, чтобы выполнить массовую Экстракт PDF-файлов из поля Blob в SQL Server, минус некоторые соединения Мамбо Джамбо
Foreach день Настройте
это код что я использовал, чтобы сделать foreach
так, как я этого хотел.
static public IEnumerable<DateTime> EachDay(DateTime Startdate, DateTime EndDate)
{
for (var day = Startdate.Date; day.Date <= EndDate.Date; day = day.AddDays(1))
yield return day;
}
разм Просмотр Кода [Экспорт PDF из базы данных обратно в PDF] (http://codereview.stackexchange.com/questions/33087/exporting-pdf-from-database-back-to-pdf-format) – Malachi