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

عندي مشروع للعباقرة فعلاً لا أبالغ

بدأه jMustafa في 23 ديسمبر 2013 · 9 رد · 600 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أعطيت هاذا المشروع لتحويله من serial  إلى  Multithreading لكن لما رأيت الكود أنفجعت فعلن أنفجعت.......... من يحب المساعدة يحمل المشروع و شكراً 

 

parallelization

 

رجاءً أضف تعليقك لأني محتاج إلى تجاوبكم 

 

 

لنك لتحميل المشروع

 

https://www.dropbox.com/s/31hb6v9rwwqqv8n/DigitalMusic.zip

تم تعديل هذه المشاركة بواسطة jMustafa في 23 ديسمبر 2013 في 17:01

#2

عدد الزوار تفريبن 50 لا ما في أي رد على الأقل تعليق واحد  وتكون نسبة الردود 2% من عدد الزوار أنا الأن لم عرف إذا كان المشروع سهل القرائة أم قدراتي بسطة

#3

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

#4

أحد المشاكل هنا

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Numerics;

namespace WpfApplication1
{
    public class timefreq
    {

        public float[][] timeFreqData;
        public int wSamp;
        public Complex[] twiddles;

        public timefreq(float[] x, int windowSamp)
        {
            int ii;
            double pi = 3.14159265;
            Complex i = Complex.ImaginaryOne;
            this.wSamp = windowSamp;
            twiddles = new Complex[wSamp];
            for (ii = 0; ii < wSamp; ii++)
            {
                double a = 2 * pi * ii / (double)wSamp;
                twiddles[ii] = Complex.Pow(Complex.Exp(-i), (float)a);
            }

            timeFreqData = new float[wSamp/2][];

            int nearest = (int)Math.Ceiling((double)x.Length / (double)wSamp);
            nearest = nearest * wSamp;

            Complex[] compX = new Complex[nearest];
            for (int kk = 0; kk < nearest; kk++)
            {
                if (kk < x.Length)
                {
                    compX[kk] = x[kk];
                }
                else
                {
                    compX[kk] = Complex.Zero;
                }
            }


            int cols = 2 * nearest /wSamp;

            for (int jj = 0; jj < wSamp / 2; jj++)
            {
                timeFreqData[jj] = new float[cols];
            }

            timeFreqData = stft(compX, wSamp);
	
        }

stft function  وحد من الشاكل

 float[][] stft(Complex[] x, int wSamp)
        {
            int ii = 0;
            int jj = 0;
            int kk = 0;
            int ll = 0;
            int N = x.Length;
            float fftMax = 0;
            
            float[][] Y = new float[wSamp / 2][];

            for (ll = 0; ll < wSamp / 2; ll++)
            {
                Y[ll] = new float[2 * (int)Math.Floor((double)N / (double)wSamp)];
            }
            
            Complex[] temp = new Complex[wSamp];
            Complex[] tempFFT = new Complex[wSamp];

            for (ii = 0; ii < 2 * Math.Floor((double)N / (double)wSamp) - 1; ii++)
            {

                for (jj = 0; jj < wSamp; jj++)
                {
                    temp[jj] = x[ii * (wSamp / 2) + jj];
                }

                tempFFT = fft(temp);

                for (kk = 0; kk < wSamp / 2; kk++)
                {
                    Y[kk][ii] = (float)Complex.Abs(tempFFT[kk]);

                    if (Y[kk][ii] > fftMax)
                    {
                        fftMax = Y[kk][ii];
                    }
                }


            }

            for (ii = 0; ii < 2 * Math.Floor((double)N / (double)wSamp) - 1; ii++)
            {
                for (kk = 0; kk < wSamp / 2; kk++)
                {
                    Y[kk][ii] /= fftMax;
                }
            }

            return Y;
        }

يستدعي fft function  عدة مرات 

 Complex[] fft(Complex[] x)
        {
            int ii = 0;
            int kk = 0;
            int N = x.Length;

            Complex[] Y = new Complex[N];

            // NEED TO MEMSET TO ZERO?

            if (N == 1)
            {
                Y[0] = x[0];
            }
            else{

                Complex[] E = new Complex[N/2];
                Complex[] O = new Complex[N/2];
                Complex[] even = new Complex[N/2];
                Complex[] odd = new Complex[N/2];

                for (ii = 0; ii < N; ii++)
                {

                    if (ii % 2 == 0)
                    {
                        even[ii / 2] = x[ii];
                    }
                    if (ii % 2 == 1)
                    {
                        odd[(ii - 1) / 2] = x[ii];
                    }
                }

                E = fft(even);
                O = fft(odd);

                for (kk = 0; kk < N; kk++)
                {
                    Y[kk] = E[(kk % (N / 2))] + O[(kk % (N / 2))] * twiddles[kk * wSamp / N];
                }
            }

           return Y;
        }
        
    }
}

المشكلة في ال fft أنة ريكرشن فنكشن

 

 

من الأفضل  العمل في stft function

            for (ii = 0; ii < 2 * Math.Floor((double)N / (double)wSamp) - 1; ii++)
            {

                for (jj = 0; jj < wSamp; jj++)
                {
                    temp[jj] = x[ii * (wSamp / 2) + jj];
                }

                tempFFT = fft(temp);

                for (kk = 0; kk < wSamp / 2; kk++)
                {
                    Y[kk][ii] = (float)Complex.Abs(tempFFT[kk]);

                    if (Y[kk][ii] > fftMax)
                    {
                        fftMax = Y[kk][ii];
                    }
                }


            }

بتديد في هذا القسم

#5

المشكلة الثانية في  class  MianWindow

       public void freqDomain()
        {
            stftRep = new timefreq(waveIn.wave, 2048);
            pixelArray = new float[stftRep.timeFreqData[0].Length * stftRep.wSamp / 2];
            for (int jj = 0; jj < stftRep.wSamp / 2; jj++)
            {
                for (int ii = 0; ii < stftRep.timeFreqData[0].Length; ii++)
                {
                    pixelArray[jj * stftRep.timeFreqData[0].Length + ii] = stftRep.timeFreqData[jj][ii];
                }
            }

        }

هاذا الفنكشن freqDomain يعمل كول للبناء لـ  timefreq  كلاس وهناك يعمل كول لـ Stft فنكشن و من ثم يعمل كول لـ fft فنكشن

#6

الطامة الكبرة هنا 

public void onsetDetection()
        {
            float[] HFC;
            int starts = 0;
            int stops = 0;
            Complex[] Y;
            double[] absY;
            List<int> lengths;
            List<int> noteStarts;
            List<int> noteStops;
            List<double> pitches;

            int ll;
            double pi = 3.14159265;
            Complex i = Complex.ImaginaryOne;

            noteStarts = new List<int>(100);
            noteStops = new List<int>(100);
            lengths = new List<int>(100);
            pitches = new List<double>(100);

            SolidColorBrush sheetBrush = new SolidColorBrush(Colors.Black);
            SolidColorBrush ErrorBrush = new SolidColorBrush(Colors.Red);
            SolidColorBrush whiteBrush = new SolidColorBrush(Colors.White);

            HFC = new float[stftRep.timeFreqData[0].Length];

            for (int jj = 0; jj < stftRep.timeFreqData[0].Length; jj++)
            {
                for (int ii = 0; ii < stftRep.wSamp / 2; ii++)
                {
                    HFC[jj] = HFC[jj] + (float)Math.Pow((double)stftRep.timeFreqData[ii][jj] * ii, 2);
                }

            }

            float maxi = HFC.Max();

            for (int jj = 0; jj < stftRep.timeFreqData[0].Length; jj++)
            {
                HFC[jj] = (float)Math.Pow((HFC[jj] / maxi), 2);
            }

            for (int jj = 0; jj < stftRep.timeFreqData[0].Length; jj++)
            {
                if (starts > stops)
                {
                    if (HFC[jj] < 0.001)
                    {
                        noteStops.Add(jj * ((stftRep.wSamp - 1) / 2));
                        stops = stops + 1;
                    }
                }
                else if (starts - stops == 0)
                {
                    if (HFC[jj] > 0.001)
                    {
                        noteStarts.Add(jj * ((stftRep.wSamp - 1) / 2));
                        starts = starts + 1;
                    }

                }
            }

            if (starts > stops)
            {
                noteStops.Add(waveIn.data.Length);
            }


            // DETERMINES START AND FINISH TIME OF NOTES BASED ON ONSET DETECTION       

            ///*

            for (int ii = 0; ii < noteStops.Count; ii++)
            {
                lengths.Add(noteStops[ii] - noteStarts[ii]);
            }            

            for (int mm = 0; mm < lengths.Count; mm++)
            {
                int nearest = (int)Math.Pow(2, Math.Ceiling(Math.Log(lengths[mm], 2)));
                twiddles = new Complex[nearest];
                for (ll = 0; ll < nearest; ll++)
                {
                    double a = 2 * pi * ll / (double)nearest;
                    twiddles[ll] = Complex.Pow(Complex.Exp(-i), (float)a);
                }

                compX = new Complex[nearest];
                for (int kk = 0; kk < nearest; kk++)
                {
                    if (kk < lengths[mm] && (noteStarts[mm] + kk) < waveIn.wave.Length)
                    {
                        compX[kk] = waveIn.wave[noteStarts[mm] + kk];
                    }
                    else
                    {
                        compX[kk] = Complex.Zero;
                    }
                }

                    Y = new Complex[nearest];

                    Y = fft(compX, nearest);

                    absY = new double[nearest];

                    double maximum = 0;
                    int maxInd = 0;

                    for (int jj = 0; jj < Y.Length; jj++)
                    {
                        absY[jj] = Y[jj].Magnitude;
                        if (absY[jj] > maximum)
                        {
                            maximum = absY[jj];
                            maxInd = jj;
                        }
                    }

                    for (int div = 6; div > 1; div--)
                    {

                        if (maxInd > nearest / 2)
                        {
                            if (absY[(int)Math.Floor((double)(nearest - maxInd) / div)] / absY[(maxInd)] > 0.10)
                            {
                                maxInd = (nearest - maxInd) / div;
                            }
                        }
                        else
                        {
                            if (absY[(int)Math.Floor((double)maxInd / div)] / absY[(maxInd)] > 0.10)
                            {
                                maxInd = maxInd / div;
                            }
                        }
                    }

                    if (maxInd > nearest / 2)
                    {
                        pitches.Add((nearest - maxInd) * waveIn.SampleRate / nearest);
                    }
                    else
                    {
                        pitches.Add(maxInd * waveIn.SampleRate / nearest);
                    }


                }

            musicNote[] noteArray;
            noteArray = new musicNote[noteStarts.Count()];

            for (int ii = 0; ii < noteStarts.Count(); ii++)
            {
                noteArray[ii] = new musicNote(pitches[ii], lengths[ii]);
            }

            int[] sheetPitchArray = new int[sheetmusic.Length];
            int[] notePitchArray = new int[noteArray.Length];

            for (int ii = 0; ii < sheetmusic.Length; ii++)
            {
                sheetPitchArray[ii] = sheetmusic[ii].pitch % 12;
            }

            for (int jj = 0; jj < noteArray.Length; jj++)
            {
                notePitchArray[jj] = noteArray[jj].pitch % 12;
            }

            string[] alignedStrings = new string[2];

            alignedStrings = stringMatch(sheetPitchArray, notePitchArray);

            musicNote[] alignedStaffArray = new musicNote[alignedStrings[0].Length / 2];
            musicNote[] alignedNoteArray = new musicNote[alignedStrings[1].Length / 2];
            int staffCount = 0;
            int noteCount = 0;

            for (int ii = 0; ii < alignedStrings[0].Length / 2; ii++)
            {
                
                if (alignedStrings[0][2 * ii] == ' ')
                {
                    alignedStaffArray[ii] = new musicNote(0, 0);
                }
                else
                {
                    alignedStaffArray[ii] = sheetmusic[staffCount];
                    staffCount++;
                }

                if (alignedStrings[1][2 * ii] == ' ')
                {
                    alignedNoteArray[ii] = new musicNote(0, 0);
                }
                else
                {
                    alignedNoteArray[ii] = noteArray[noteCount];
                    noteCount++;
                }
            }

            // STAFF TAB DISPLAY
                
                Ellipse[] notes;
                Line[] stems;
                notes = new Ellipse[alignedNoteArray.Length];
                stems = new Line[alignedNoteArray.Length];
                SolidColorBrush myBrush = new SolidColorBrush(Colors.Green);

                RotateTransform rotate = new RotateTransform(45);

                for (int ii = 0; ii < alignedNoteArray.Length; ii++)
                {
                    //noteArray[ii] = new musicNote(pitches[ii], lengths[ii]);
                    //System.Console.Out.Write("Note " + (ii + 1) + ": \nDuration: " + noteArray[ii].duration / waveIn.SampleRate + " seconds \nPitch: " + Enum.GetName(typeof(musicNote.notePitch), (noteArray[ii].pitch) % 12) + " / " + pitches[ii] + "\nError: " + noteArray[ii].error * 100 + "%\n");
                    notes[ii] = new Ellipse();
                    notes[ii].Tag = alignedNoteArray[ii];
                    notes[ii].Height = 20;
                    notes[ii].Width = 15;
                    notes[ii].Margin = new Thickness(ii * 30, 0, 0, 0);
                    notes[ii].LayoutTransform = rotate;
                    notes[ii].MouseEnter += DisplayStats;
                    notes[ii].MouseLeave += ClearStats;
                    stems[ii] = new Line();
                    stems[ii].StrokeThickness = 1;
                    stems[ii].X1 = ii * 30 + 20;
                    stems[ii].X2 = ii * 30 + 20;
                    stems[ii].Y1 = 250 - 10 * alignedNoteArray[ii].staffPos;
                    stems[ii].Y2 = 250 - 10 * alignedNoteArray[ii].staffPos - 40;
                    notes[ii].Fill = ErrorBrush;
                    notes[ii].StrokeThickness = 1;
                    stems[ii].Stroke = ErrorBrush;


                    Canvas.SetTop(notes[ii], (240 - 10 * alignedNoteArray[ii].staffPos));
                    if (alignedNoteArray[ii].flat)
                    {
                        System.Windows.Controls.Label flat = new System.Windows.Controls.Label();
                        flat.Content = "b";
                        flat.FontFamily = new FontFamily("Mistral");
                        flat.Margin = new Thickness(ii * 30 + 15, 0, 0, 0);
                        Canvas.SetTop(flat, (240 - 10 * alignedNoteArray[ii].staffPos));
                        noteStaff.Children.Insert(ii, flat);
                    }

                    noteStaff.Children.Insert(ii, notes[ii]);
                    noteStaff.Children.Insert(ii, stems[ii]);
                    
                }            
            
            Ellipse[] sheetNotes;
            Rectangle[] timeRect;
            Line[] sheetStems;
            sheetNotes = new Ellipse[alignedStaffArray.Length];
            sheetStems = new Line[alignedStaffArray.Length];
            timeRect = new Rectangle[2 * alignedStaffArray.Length];

            Fline.Width = alignedStaffArray.Length * 30;
            Dline.Width = alignedStaffArray.Length * 30;
            Bline.Width = alignedStaffArray.Length * 30;
            Gline.Width = alignedStaffArray.Length * 30;
            Eline.Width = alignedStaffArray.Length * 30;
            noteStaff.Width = alignedStaffArray.Length * 30;


            for (int ii = 0; ii < alignedStaffArray.Length; ii++)
            {

                sheetNotes[ii] = new Ellipse();
                sheetNotes[ii].Tag = alignedStaffArray[ii];
                sheetNotes[ii].Height = 20;
                sheetNotes[ii].Width = 15;
                sheetNotes[ii].Margin = new Thickness(ii * 30, 0, 0, 0);
                sheetNotes[ii].LayoutTransform = rotate;
                sheetNotes[ii].MouseEnter += DisplayStats;
                sheetNotes[ii].MouseLeave += ClearStats;
                sheetStems[ii] = new Line();
                sheetStems[ii].StrokeThickness = 1;
                sheetStems[ii].X1 = ii * 30 + 20;
                sheetStems[ii].X2 = ii * 30 + 20;
                sheetStems[ii].Y1 = 250 - 10 * alignedStaffArray[ii].staffPos;
                sheetStems[ii].Y2 = 250 - 10 * alignedStaffArray[ii].staffPos - 40;

                sheetNotes[ii].Fill = sheetBrush;
                sheetNotes[ii].StrokeThickness = 1;
                sheetStems[ii].Stroke = sheetBrush;


                Canvas.SetTop(sheetNotes[ii], (240 - 10 * alignedStaffArray[ii].staffPos));
                if (alignedStaffArray[ii].flat)
                {
                    System.Windows.Controls.Label flat = new System.Windows.Controls.Label();
                    flat.Content = "b";
                    flat.FontFamily = new FontFamily("Mistral");
                    flat.Margin = new Thickness(ii * 30 + 15, 0, 0, 0);
                    Canvas.SetTop(flat, (240 - 10 * alignedStaffArray[ii].staffPos));
                    noteStaff.Children.Insert(ii, flat);
                }
                noteStaff.Children.Insert(ii, sheetNotes[ii]);
                noteStaff.Children.Insert(ii, sheetStems[ii]);
            }

            // FOR TIMING ERROR RECTANGLES

            for (int ii = 0; ii < alignedStaffArray.Length; ii++)
            {

                timeRect[ii] = new Rectangle();
                timeRect[ii].Fill = sheetBrush;
                timeRect[ii].Height = 10 * alignedStaffArray[ii].duration * 4 * bpm / (60 * waveIn.SampleRate);
                timeRect[ii].Width = 15;
                timeRect[ii].Margin = new Thickness(ii * 30 + 5, 0, 0, 0);

                Canvas.SetTop(timeRect[ii], 200);

                noteStaff.Children.Insert(ii, timeRect[ii]);

            }

            for (int ii = alignedStaffArray.Length; ii < alignedStaffArray.Length + alignedNoteArray.Length; ii++)
            {

                timeRect[ii] = new Rectangle();
                timeRect[ii].Fill = ErrorBrush;
                timeRect[ii].Height = 10 * alignedNoteArray[ii - alignedStaffArray.Length].duration * 4 * bpm / (60 * waveIn.SampleRate);
                timeRect[ii].Width = 10;
                timeRect[ii].Margin = new Thickness((ii - alignedStaffArray.Length) * 30 + 5, 0, 0, 0);

                Canvas.SetTop(timeRect[ii], 200);
                noteStaff.Children.Insert(ii, timeRect[ii]);
            }


        }

بتحديد في هذا القسم لأنة يعمل كول لي fft فنكشن داخل mainwindow class

for (int mm = 0; mm < lengths.Count; mm++)
            {
                int nearest = (int)Math.Pow(2, Math.Ceiling(Math.Log(lengths[mm], 2)));
                twiddles = new Complex[nearest];
                for (ll = 0; ll < nearest; ll++)
                {
                    double a = 2 * pi * ll / (double)nearest;
                    twiddles[ll] = Complex.Pow(Complex.Exp(-i), (float)a);
                }

                compX = new Complex[nearest];
                for (int kk = 0; kk < nearest; kk++)
                {
                    if (kk < lengths[mm] && (noteStarts[mm] + kk) < waveIn.wave.Length)
                    {
                        compX[kk] = waveIn.wave[noteStarts[mm] + kk];
                    }
                    else
                    {
                        compX[kk] = Complex.Zero;
                    }
                }

                    Y = new Complex[nearest];

                    Y = fft(compX, nearest);

                    absY = new double[nearest];

                    double maximum = 0;
                    int maxInd = 0;

                    for (int jj = 0; jj < Y.Length; jj++)
                    {
                        absY[jj] = Y[jj].Magnitude;
                        if (absY[jj] > maximum)
                        {
                            maximum = absY[jj];
                            maxInd = jj;
                        }
                    }

                    for (int div = 6; div > 1; div--)
                    {

                        if (maxInd > nearest / 2)
                        {
                            if (absY[(int)Math.Floor((double)(nearest - maxInd) / div)] / absY[(maxInd)] > 0.10)
                            {
                                maxInd = (nearest - maxInd) / div;
                            }
                        }
                        else
                        {
                            if (absY[(int)Math.Floor((double)maxInd / div)] / absY[(maxInd)] > 0.10)
                            {
                                maxInd = maxInd / div;
                            }
                        }
                    }

                    if (maxInd > nearest / 2)
                    {
                        pitches.Add((nearest - maxInd) * waveIn.SampleRate / nearest);
                    }
                    else
                    {
                        pitches.Add(maxInd * waveIn.SampleRate / nearest);
                    }


                }

fft in mainwindow calss

public Complex[] fft(Complex[] x, int L)
        {
            int ii = 0;
            int kk = 0;
            int N = x.Length;

            Complex[] Y = new Complex[N];

            if (N == 1)
            {
                Y[0] = x[0];
            }
            else
            {

                Complex[] E = new Complex[N / 2];
                Complex[] O = new Complex[N / 2];
                Complex[] even = new Complex[N / 2];
                Complex[] odd = new Complex[N / 2];

                for (ii = 0; ii < N; ii++)
                {

                    if (ii % 2 == 0)
                    {
                        even[ii / 2] = x[ii];
                    }
                    if (ii % 2 == 1)
                    {
                        odd[(ii - 1) / 2] = x[ii];
                    }
                }

                E = fft(even,L);
                O = fft(odd,L);

                for (kk = 0; kk < N; kk++)
                {
                    Y[kk] = E[(kk % (N / 2))] + O[(kk % (N / 2))] * twiddles[kk*(L/N)];
                }
            }

            return Y;
        }

تم تعديل هذه المشاركة بواسطة jMustafa في 24 ديسمبر 2013 في 09:26

#7

أتمنى أني وضحت الفكرة أرجوا منكم أن لا تبخلوا بالتعليقات 

#9

المطلوب توزيع ضغط البرنامج على عدد الكور الموجودة في المعالج 

 

كحل أخر بالأمكن أستخدام GPU عوضا عن CPU بستخدام  cuda or OpenGL or opencl

 

الخيارات التي في الحل الثاني صعبة جداً بنسة لي

#10

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

 

أخي الكريم الموضوع ليس مرتبط بدرجة الـ IQ أو العبقرية .. المسألة مرتبطة بالوقت الذي يحتاجه المرء لمساعدتك في مشروع مثل هذا و لا أظن أن هناك مبرمج محترف سيتفرغ كذا يوم ليعدل أو يصلح في مشروع برمجي كالذي طرحته مع أني اتمنى مساعدتك لكن مشكلتك تتطلب قراءة و تعديل كود كبير حسب ما رأيت بشكل سريع.

 

و لك مني فائق الاحترام

1

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

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