PDA

View Full Version : خروج اطلاعات به word با استفاده از linq



Yanehsar
جمعه 29 آبان 1394, 17:54 عصر
سلام دوستان من یه جدول دارم که قرار هستش اطلاعاته فایل ورد رو داخلش ذخیره کنم و بازیابی کنم
برای بازیابی اطلاعات با linq به مشکل برخوردم با استفاده از کدهای dbo زیر تونستم خروجی بگیرم اما با linq موافق نشدم ممنون میشم راهنمائیم کنید که چطوری میتونم اطلاعات خودم رو بریزم داخل Datareader . یا اگر راه حلی برای انتقال اطلاعات از جدول به ورد داریم راهنمائیم کنید .

string ToSaveFileTo = Application.StartupPath + "\\reportMain.docx";
using (SqlConnection con = new SqlConnection(@"Data Source=.;Initial Catalog=SavePDFTable;Integrated Security=True"))
{
con.Open();
using (SqlCommand cmd = new SqlCommand("select * from SaveTable where id=12", con))
{
using (SqlDataReader Dr=cmd.ExecuteReader(System.Data.CommandBehavior.D efault))
{
if(Dr.Read())
{
byte[] FileData=(byte[])Dr.GetValue(1);
using (System.IO.FileStream fs=new FileStream(ToSaveFileTo,FileMode.Create,FileAccess .ReadWrite))
{
using (System.IO.BinaryWriter Bw = new System.IO.BinaryWriter(fs))
{
Bw.Write(FileData);
Bw.Close();
}
}
}
}
}
}

tefos666
شنبه 30 آبان 1394, 17:31 عصر
سلام
شما باید به list خروجی بگیری

این سایت رو بیبن ایده میگیری
http://stackoverflow.com/questions/1464883/how-can-i-easily-convert-datareader-to-listt


همچنین این مثال رو

public IEnumerable<byte[]>GetArrays(byte[] data,byte delimiter)
{
List<byte[]> arrays =new List<byte[]>();
int start =0;
while(start >=0&&(start =Array.IndexOf<byte>(data, delimiter, start))>=0)
{
start++;
if(start >= data.Length-1)
{
break;
}

int end =Array.IndexOf<byte>(data, delimiter, start);
if(end <0)
{
break;
}

byte[] sub =new byte[end - start];
Array.Copy(data, start, sub,0, end - start);
arrays.Add(sub);
start = end;
}

return arrays;
}
////////////////
public static class DataReaderExtension
{
public static IEnumerable<Object[]> DataRecord(this System.Data.IDataReader source)
{
if (source == null)
throw new ArgumentNullException("source");

while (source.Read())
{
Object[] row = new Object[source.FieldCount];
source.GetValues(row);
yield return row;
}
}
}

With this extension method, we can now create a data reader and query it using LINQ to Objects as follows:
Using cn As New System.Data.SqlClient.SqlConnection(MyConnectionSt ring)
cn.Open()
Using cm = cn.CreateCommand
cm.CommandType = Data.CommandType.Text
cm.CommandText = "Select IsApproved, EnteredDate, Creator from Comments"
Using dr = cm.ExecuteReader
Me.Listbox1.DataSource = _
From row In dr.DataRecord _
Where CBool(row(0)) _
Order By CDate(row(1)) _
Select CStr(row(2)) Distinct
Listbox1.DataBind()
End Using
End Using
End Using

Yanehsar
شنبه 30 آبان 1394, 20:28 عصر
سلام
شما باید به list خروجی بگیری

این سایت رو بیبن ایده میگیری
http://stackoverflow.com/questions/1464883/how-can-i-easily-convert-datareader-to-listt


مرسی از راهنمائی شما ، قبلا این سایت و تایپک رو دیده بودم اما منظورش از سه نقطه رو تو این تیکه کد چیه ؟؟؟


using (DataReader reader = ...)
{
List<CustomerDTO> customers = reader.AutoMap<CustomerDTO>()
.ToList();
}

Mahmoud.Afrad
یک شنبه 01 آذر 1394, 01:34 صبح
توسط متد SingleOrDefault تک رکورد مورد نظر رو سلکت کن. اگر ستون عکس رو از نوع varbinary گرفتی ، پراپرتی عکس رو از طریق متد ToArray به آرایه ای از بایت تبدیل کن و ازش استفاده کن

SaveTable t = db.SaveTables.SingleOrDefault(item => item.Id == 12);
if (t != null && t.pic != null)
{
byte[] picBytes = t.pic.ToArray();
string filePath = System.IO.Path.Combine(Application.StartupPath, "reportMain.docx");
File.WriteAllBytes(filePath, picBytes);
// ...
}