خواندن فایل از دیتابیس (نمایش همه فایل ها از دیتابیس)
با سلام
عزیزان من طبق آموزش دوره انبارداری سی شارپ فایل رو توو دیتا بیس ذخیره میکنم (عکس و پی دی اف و نقشه و ...) تا حجم 10 مگ برای هر فایل
عکس هارو طبق آموزش تونستم تو فرم نمایش بدم (از دیتابیس )
ولی من نیاز دارم همه فایل هارو بتونم باز کنم توو دیتا گریدم برای هر فایل یه دکمه نمایش قرار دادم و میخوام وقتی کاربر روی هر کدوم کلیک کرد اگه نرم افزارش رو سیستمش بود براش باز کنه اگه نداش اخطار بده بهش
مثل شرایطی که ما یه فایل مثلا اتوکد رو سیستم داریم و روش دابل کلیک میکنیم اگه اتوکد داشته باشیم رو سیستممون باز میکنه اگه نه که اخطار میده
یا اگه اینطوری نشه
کاربر بتونه اون فایل رو سیستمش ذخیره کنه
با MemoryStream خواستم انجام بدم ولی خب نشد
ممنون میشم راهنماییم کنید
پاسخ هوش مصنوعی
برای خواندن فایل ها از دیتابیس و نمایش آنها در یک DataGridView همراه با امکان باز کردن فایل ها یا ذخیره آنها، می توانید از کد زیر استفاده کنید.
ابتدا مطمین شوید که فایل ها را به درستی در دیتابیس ذخیره کرده اید. سپس می توانید به صورت زیر فایل ها را خوانده و نمایشان را در DataGridView پیاده سازی کنید:
CSharp
using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Windows.Forms;
public void LoadFilesIntoDataGridView(DataGridView dataGridView)
{
string connectionString = "your_connection_string"; // connection string to your database
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand("SELECT Id, FileName FROM YourFilesTable", connection);
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataTable table = new DataTable();
adapter.Fill(table);
dataGridView.DataSource = table;
}
}
private void dataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == dataGridView.Columns["OpenButton"].Index) // assuming you have a button column
{
int fileId = (int)dataGridView.Rows[e.RowIndex].Cells["Id"].Value; // Get the Id of the file
byte[] fileData = GetFileDataById(fileId); // method to retrieve file data from database
string fileName = dataGridView.Rows[e.RowIndex].Cells["FileName"].Value.ToString();
string tempFilePath = Path.Combine(Path.GetTempPath(), fileName);
File.WriteAllBytes(tempFilePath, fileData);
// Open the file
try
{
System.Diagnostics.Process.Start(tempFilePath);
}
catch
{
MessageBox.Show("نرم افزار لازم برای باز کردن این فایل بر روی سیستم شما نصب نشده است.");
}
}
}
private byte[] GetFileDataById(int fileId)
{
string connectionString = "your_connection_string";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand("SELECT FileData FROM YourFilesTable WHERE Id = @Id", connection);
command.Parameters.AddWithValue("@Id", fileId);
return (byte[])command.ExecuteScalar();
}
}
در کد بالا، ابتدا فایل ها را از دیتابیس می خوانیم و در DataGridView نمایش می دهیم. سپس با کلیک بر روی دکمه باز کردن، فایل را از دیتابیس می گیریم و در یک فایل موقت ذخیره می کنیم. بعد با استفاده از Process.Start فایل را باز می کنیم. در صورت عدم وجود نرم افزار مناسب، پیغام خطا به کاربر نمایش داده می شود.
برای ذخیره فایل نیز می توانید یک دکمه دیگر بگذارید که با کلیک بر روی آن، کاربر بتواند فایل را در محل دلخواهش ذخیره کند.
منم این مشکل روداشتم با
System.IO.File.WriteAllBytes(SaveAdderrs, File);
SaveAdderrs آدرس ذخیره فایل هستش که میتونید پیشفرض خودتون بدین یا با
Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
از کاربر بگیرین
File تو آموزش هستش فایل رو از باینری بوودن در میارید مثل همون عکس که گفتید کوری میزنید و...
با این کار میتونید ذخیره کنید ولی انکه چطوری مستقیم اجراش کنید منم نمیدنم اگه دوستان بگن منم نیاز دارم
با تشکر از شما
برای مستقیم هم از ReadAllByte استفاده کنید
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf
- Library Animation برای کنترلهای WPF
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress
- قرار دادن مقادیر ارسالی یک ستون از جدول به صورت سطری در استیمول