بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته أنا المبرمج عبدالله و هذه اول مشاركة لي في كتابة المواضيع لذا اعذرونا على ركيك الكلام
هل يريد احد منكم معرفة كيفية تخزين ملف وورد أو اكسل أو مهما كان نوعه في قاعدة البيانات
و اليك اخي و اليكم اخوتي الجواب
هذا الكود قمت بكتابته أنا و صديقي الرائع الفنان فادي السيد
أولا : يجب علكيم معرفة أن قاعدة البيانات المستخدمة
SQL SERVER 2005 Enterprice Edtion
و لا تنفع 2000
و لا حتى 2005 اكسبرس و سوف تعرفون هذا لاحقا ,أنا آسف تنفع لكن لا تحمل الملفات ذات الحجم الكبير حيث ان المتغير
varbinary(max)
غير موجود في نسخة اكسبرس ....
ثانيا : لغة الرمجة المستخدمة
Vb.Net 2005
كيفية البدأ أولا قم بفتح قاعدة ابيانات
SQL Server
و اكتب الكود التالي لانشاء جدول
"USE myDataBaseName
GO
CREATE TABLE myTable(FileName nvarchar(60),
FileType nvarchar(60), Document varbinary(max))
GO"
الجدول السابق يحوي على ثلاثة حقول الاول اسم الملف الثاني امتداده و الثالث الملف نفسه مشفر على شكل باينري
Open file dialog and FolderBrowserDialogقم بوضع
أما لتخزين الملف قم بانشاء زر و سمه تحميل ملف و ضع فيه الكود التالي
If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
' لفتح صندوق حوار
Dim sFile As String = OpenFileDialog1.FileName
'تعريف فايل ستريم ووضع ملفك داخله على شكل باينري
Dim fil As New FileStream(sFile, FileMode.OpenOrCreate)
Dim aBuff(fil.Length) As Byte
Dim l As Long = fil.Length
fil.Read(aBuff, 0, l)
'كود التخزين عادي لا يحتاج الى شرح
Dim conn As New SqlConnection()
conn.ConnectionString = " Data Source=ABDULLAH-3A52C7\ASSAF;Initial Catalog=myDataBaseName;Trusted_Connection=True"
Dim cmd As New SqlClient.SqlCommand(" INSERT INTO myTable(FileName, FileType, Document) SELECT '" + Path.GetFileName(sFile) + "' AS FileName, '" + Path.GetExtension(sFile) + "' AS FileType,@Bin AS Document", conn)
'* FROM OPENROWSET(BULK N'" + sFile + "', SINGLE_BLOB)
cmd.CommandText = " INSERT INTO myTable(FileName, FileType, Document) SELECT '" + Path.GetFileName(sFile) + "' AS FileName, '" + Path.GetExtension(sFile) + "' AS FileType,@Bin AS Document"
cmd.Parameters.Clear()
cmd.Parameters.Add("@Bin", aBuff)
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
'اعمل جاربج كلكشن اي عمل اعادة رسم للفورم
GC.Collect()
'اعادة تحميل النموذج
Form1_Load(Nothing, Nothing)
End If
End Sub
كود عرض الملف جميع الملفات المحملة داخل قاعدة البيانات داخل الكمبو بوكس
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'كود عادي لا داعي للشرح
Dim ds As New DataSet
Dim conn As New SqlConnection()
conn.ConnectionString = " Data Source=ABDULLAH-3A52C7\ASSAF;Initial Catalog=myDataBaseName;Trusted_Connection=True"
Dim da As New SqlClient.SqlDataAdapter("Select FileName From myTable ", conn)
da.Fill(ds)
ComboBox1.Items.Clear()
For Each dr As DataRow In ds.Tables(0).Rows
ComboBox1.Items.Add(dr("FileName").ToString)
Next
End Sub
كود تحميل الملف من قاعدة البيانات الى مسار أنت تختاره
Private Sub btnGetFileFromDb_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetFileFromDb.Click
Dim conn As New SqlConnection()
conn.ConnectionString = " Data Source=ABDULLAH-3A52C7\ASSAF;Initial Catalog=myDataBaseName;Trusted_Connection=True"
Dim da As New SqlClient.SqlDataAdapter("Select * From myTable Where FileName='" + (ComboBox1.SelectedItem.ToString.Trim).Trim + "'", conn)
Dim ds As New DataSet
da.Fill(ds)
'تحميل الملف في بفر ووضعه على فايل ستريم تمهيدا لتخزينه
Dim aBuff() As Byte = ds.Tables(0).Rows(0)("Document")
Dim sFile As String = ds.Tables(0).Rows(0)("FileName")
If FolderBrowserDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
sFile = FolderBrowserDialog1.SelectedPath + "\" + sFile
Dim fil As New FileStream(sFile, FileMode.OpenOrCreate)
Dim l As Long = aBuff.Length
fil.Write(aBuff, 0, l)
fil.Flush()
fil.Close()
fil.Dispose()
GC.Collect()
End If
End Sub
أخواني الملف المرفق يوضح الامر بشكل ادق تتبعوه و انا مستعد لاي سؤال او استفسار لا تنسو عمل اتاش لقاعدة البيانات من داخل البن وايضا تعديل الكنكشن سترنج باسم السيرفر عندكم
و اخيرا لكم جزيل الشكر و التقدير
