PDA

View Full Version : اینزرت کردن گروهی از فایل های پی دی اف به پایگاه داده



elderado
دوشنبه 25 آذر 1392, 13:17 عصر
با سلام و خسته نباشید

دوستان من میخوام یک گروه از فایل های پی دی اف رو به پایگاه داده اینزرت کنم
در حال حاضر بصورت تک تک می تونم این کار و بکنم
اما چون تعداد فایل ها زیاده امکان اینزرت تک به تک وجود نداره
جدول توی پایگاه داده از دوتا فیلد تشکیل میشه که اولی از نوع
varbinary(max )
هست و دومی از نوع
nvarchar(max)
با این کد فایل ها رو اینزرت میکنم:

OpenFileDialog ofd = new OpenFileDialog();
ofd.ShowDialog();

byte[] jalal = null;
FileInfo fi = new FileInfo(ofd.FileName);
FileStream fs = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
long totalbytes = new FileInfo(ofd.FileName).Length;
jalal = br.ReadBytes((Int32)totalbytes);
fs.Close();
fs.Dispose();
br.Close();
byte[] bytes = File.ReadAllBytes(ofd.FileName);
SqlParameter fileP = new SqlParameter("@file", SqlDbType.VarBinary);
fileP.Value = bytes;
SqlParameter name = new SqlParameter("@pname", SqlDbType.NVarChar);
name.Value = fi.Name;
SqlCommand myCommand = new SqlCommand();
myCommand.Parameters.Add(fileP);
myCommand.Parameters.Add(name);
SqlConnection conn = new SqlConnection(@"Data Source=.;Initial Catalog=pdf;Integrated Security=True;");
conn.Open();
myCommand.Connection = conn;
myCommand.CommandText = "spPdfInsert";
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.ExecuteNonQuery();
conn.Close();


لطفا راهنمایی کنید برای اینکه بتونم همه ی فایل ها رو اینزرت کنم باید چه تغییری توی این کد ها بدم
ممنونم

hamid_hr
دوشنبه 25 آذر 1392, 14:32 عصر
من اينطوري اينزرت ميكنم
public void InsertFileGroup(string[] FileNames)
{
string sqlcmd = "";
int i = 0;
List<SqlParameter> LSQ = new List<SqlParameter>();
byte[] bt;
foreach (string tmp in FileNames)
{
sqlcmd += " INSERT INTO [dbo].[TrsDocument] " +
" ([UqID],[Pic]) " +
" VALUES(NEWID(),@pic1" + i ;
bt = System.IO.File.ReadAllBytes(tmp);
LSQ.Add(new SqlParameter("pic1" + i, bt));
i++;
}
SqlCommand Cmd = new SqlCommand(sqlcmd, cnn);
Cmd.Parameters.AddRange(LSQ.ToArray());
Cmd.ExecuteNonQuery();
}

elderado
دوشنبه 25 آذر 1392, 20:08 عصر
متشکرم
کد شما خیلی حرفه ای هست و تازه کارهایی مثل من نمی تونیم اون رو بفهمیم
یه راه پیدا کردم که این کار رو انجام میده
میزارم اینجا تا شاید به درد یکی مثل خودم بخوره
حالا برای پرینت اون و نشون دادن پرینت پرویو باید چجوری کد بنویسم؟ میتونم اون رو مستقیم بفرستم برای پرینت ، اما میخوام کادر تنظیمات پرینتر نشون داده بشه شاید کاربر بخاد پشت و رو یا دو برگه رو در یک برگه پرینت بگیره
کلا برای نمایش پرینت پرویو و تنظیمات پرینتر چجوری باید عمل کرد؟



اینم کد اینزتی که خودم نوشتم:


try
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Multiselect = true;
ofd.ShowDialog();
int c = ofd.FileNames.Length;
int cc = 0;
string pppp = Path.GetDirectoryName(ofd.FileName);

foreach (var file in ofd.FileNames)
{
byte[] jalal = null;
FileInfo fi = new FileInfo(file.ToString());
FileStream fs = new FileStream(file.ToString(), FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
long totalbytes = new FileInfo(file.ToString()).Length;
jalal = br.ReadBytes((Int32)totalbytes);
fs.Close();
fs.Dispose();
br.Close();
byte[] bytes = File.ReadAllBytes(file.ToString());
SqlParameter fileP = new SqlParameter("@file", SqlDbType.VarBinary);
fileP.Value = bytes;
SqlParameter name = new SqlParameter("@pname", SqlDbType.NVarChar);
name.Value = fi.Name;
SqlCommand myCommand = new SqlCommand();
myCommand.Parameters.Add(fileP);
myCommand.Parameters.Add(name);
SqlConnection conn = new SqlConnection(@"Data Source=.;Initial Catalog=pdf;Integrated Security=True");
conn.Open();
myCommand.Connection = conn;
myCommand.CommandText = "spPdfInsert";
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.ExecuteNonQuery();
conn.Close();
cC++‎‎‎;
}
MessageBox.Show("تعداد "+cc+" فایل اضافه شد");

}
catch { }

alexmcse
دوشنبه 25 آذر 1392, 20:23 عصر
متشکرم
کد شما خیلی حرفه ای هست و تازه کارهایی مثل من نمی تونیم اون رو بفهمیم
یه راه پیدا کردم که این کار رو انجام میده
میزارم اینجا تا شاید به درد یکی مثل خودم بخوره
حالا برای پرینت اون و نشون دادن پرینت پرویو باید چجوری کد بنویسم؟ میتونم اون رو مستقیم بفرستم برای پرینت ، اما میخوام کادر تنظیمات پرینتر نشون داده بشه شاید کاربر بخاد پشت و رو یا دو برگه رو در یک برگه پرینت بگیره
کلا برای نمایش پرینت پرویو و تنظیمات پرینتر چجوری باید عمل کرد؟



اینم کد اینزتی که خودم نوشتم:


try
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Multiselect = true;
ofd.ShowDialog();
int c = ofd.FileNames.Length;
int cc = 0;
string pppp = Path.GetDirectoryName(ofd.FileName);

foreach (var file in ofd.FileNames)
{
byte[] jalal = null;
FileInfo fi = new FileInfo(file.ToString());
FileStream fs = new FileStream(file.ToString(), FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
long totalbytes = new FileInfo(file.ToString()).Length;
jalal = br.ReadBytes((Int32)totalbytes);
fs.Close();
fs.Dispose();
br.Close();
byte[] bytes = File.ReadAllBytes(file.ToString());
SqlParameter fileP = new SqlParameter("@file", SqlDbType.VarBinary);
fileP.Value = bytes;
SqlParameter name = new SqlParameter("@pname", SqlDbType.NVarChar);
name.Value = fi.Name;
SqlCommand myCommand = new SqlCommand();
myCommand.Parameters.Add(fileP);
myCommand.Parameters.Add(name);
SqlConnection conn = new SqlConnection(@"Data Source=.;Initial Catalog=pdf;Integrated Security=True");
conn.Open();
myCommand.Connection = conn;
myCommand.CommandText = "spPdfInsert";
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.ExecuteNonQuery();
conn.Close();
cC++‎‎‎‎‎‎;
}
MessageBox.Show("تعداد "+cc+" فایل اضافه شد");

}
catch { }



عزیز
به پروژه
myCommand.CommandText = "spPdfInsert";

اضافه نکردی
StoredProcedure spPdfInsert

elderado
دوشنبه 25 آذر 1392, 20:31 عصر
اگه منظورتون کد های استور پروسیجر هست ، کد اینه:

Procedure [dbo].[spPdfInsert] (
@file varbinary(max) = null,
@pname nvarchar(950)
)
AS


Insert Into jal
( pdfdata,pdfname )
Values
( @file,@pname )





این کد کار می کنه ها!!!

برای نشون دادن فرم تنظیمات پرینتر و پرینت کردن یک فایل از روی هارد دیسک چه کدی باید بنویسم. لطفا راهنمایی کنید. ممنونم

با این کد فایل میره برای پرینت ، اما میخوام فرم تنظیمات پرینت نمایش داده بشه


ProcessStartInfo info = new ProcessStartInfo();
info.Verb = "print";
info.FileName = @"c:\windows\jalal.pdf";
info.CreateNoWindow = true;
info.WindowStyle = ProcessWindowStyle.Hidden;

Process p = new Process();
p.StartInfo = info;
p.Start();

p.WaitForInputIdle();
System.Threading.Thread.Sleep(3000);
if (false == p.CloseMainWindow())
p.Kill();

alexmcse
دوشنبه 25 آذر 1392, 20:46 عصر
از استاد ایمان مدائنی بپرس
http://barnamenevis.org/member.php?125609-%D8%A7%DB%8C%D9%85%D8%A7%D9%86-%D9%85%D8%AF%D8%A7%D8%A6%D9%86%DB%8C

alexmcse
دوشنبه 25 آذر 1392, 21:01 عصر
از کنترل پرینت در تول باکس استفاده کن

به این لینک برو
http://msdn.microsoft.com/en-us/library/system.windows.controls.printdialog(v=vs.110).aspx

elderado
دوشنبه 25 آذر 1392, 21:17 عصر
ممنونم دوست عزیز
اما نتونستم از کدی که توی این لینک بود استفاده کنم

elderado
دوشنبه 25 آذر 1392, 21:58 عصر
بالاخره بعد از کلی سرچ این کد ها کمکم کرد

http://support.microsoft.com/kb/322091

Kamarian.Reza
چهارشنبه 11 دی 1392, 23:34 عصر
دوستان من میخوام یک گروه از فایل های پی دی اف رو به پایگاه داده اینزرت کنم

دوست گرامی، معمولا فایل رو داخل جداول پایکاه داده قرار نمی‌دن
شما باید اون رو جداگانه در یک مسیر مشخص ذخیره و آدرس فایل رو در جدول نگهداری کنید