الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تعلم كيف تدخل ملف مهما كان نوعه في قاعدة بيانات Sql Server , ليس لينك انما الملف نفسه

بدأه assaf_abdullah في 26 يوليو 2008 · 6 رد · 2,882 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته أنا المبرمج عبدالله و هذه اول مشاركة لي في كتابة المواضيع لذا اعذرونا على ركيك الكلام

هل يريد احد منكم معرفة كيفية تخزين ملف وورد أو اكسل أو مهما كان نوعه في قاعدة البيانات

و اليك اخي و اليكم اخوتي الجواب

هذا الكود قمت بكتابته أنا و صديقي الرائع الفنان فادي السيد

أولا : يجب علكيم معرفة أن قاعدة البيانات المستخدمة

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

أخواني الملف المرفق يوضح الامر بشكل ادق تتبعوه و انا مستعد لاي سؤال او استفسار لا تنسو عمل اتاش لقاعدة البيانات من داخل البن وايضا تعديل الكنكشن سترنج باسم السيرفر عندكم

و اخيرا لكم جزيل الشكر و التقدير

SaveFileInDB.rar

تم تعديل هذه المشاركة بواسطة assaf_abdullah في 26 يوليو 2008 في 18:57

<EMBED src=http://www.abdelghafar.com/images/banners/bm2.swf width=486 height=60 type=application/x-shockwave-flash EMBED < menu="false" loop="true" quality="high">

#2

السلام عليكم

جزاك الله خيراً..

وانظر هذا الموضوع:

/index.php?showtopic=110475

قال صلى الله عليه وسلم: من قال إذا أصبح: رضيت بالله ربا وبالإسلام دينا وبمحمد نبيا فأنا الزعيم لآخذن بيده حتى أدخله الجنة. الصحيحة/2686

#3

اخي الموضوع السابق الذي طلبت مني النظر اليه جيد لكنه لا يسمح لك باسترجاع ملف محدد لكن هذا المثال افضل و امتن لان حجم الملف المحمل قد يزيد عن 2 جيجا بايت ان اردت تحميل هذا الحجم الكبير

<EMBED src=http://www.abdelghafar.com/images/banners/bm2.swf width=486 height=60 type=application/x-shockwave-flash EMBED < menu="false" loop="true" quality="high">

#4

انا فهمت أغلب الكود ولكن سأكون ممنونا لأحد الإخوة لو حوله إلى #C ... شكرا لك على الدرس الجميل وأغلب الكود واضح ولكنني لم أفهم بعضه

الرجاء من أحد الإخوة تحويله إذا لم يكن في الأمر إزعاج

MAAAAAAAAAAAAAAAAAAAAAAAC

#5

السلام عليكم

يمكن استخدام بدل varbinary(max) الحقل Image في اصدار 2000 وايضا نفس الطريقة يمكن استخدامها للاكسس مع تغيير SQL الى OLE طبعا مع حجم ملفات اصغر (2 جيجا حجم كبير جدا والقليل من يعامل معه )

#6

السلام عليكم ورحمة الله

معلومة بسيطة قد تفيدك في تطوير هذا البرنامج، الحقل من النوع varbinary(max) محدود ويستطيع أن يخزن حتى 2 قيقابايت ولا يمكنه تخزين أكثر من ذلك ، وكما قال بعض الأخوة أن القليل من الناس يحتاجون الى تخزين هذا الحجم من البيانات ولكن إن وجدت بعض الوقت بعد الإنتهاء من تطوير هذا البرنامج وتجربته عمل نسخة أخرى تدعم تخزين الملفات بغض النظر عن حجمها.

والله الموفق

#7
اقتباس
الرجاء من أحد الإخوة تحويله إذا لم يكن في الأمر إزعاج

للتحويل

http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx

واذا بقي شيء لم يحول او به خطأ يمكن الاستفسار عنه

مواضيع مشابهة