نمایش نتایج 1 تا 21 از 21

نام تاپیک: Database & DataGridView

  1. #1

    Database & DataGridView

    من تو برنامم میخوام رکوردها رو از database بخونه و فیلد تاریخی رو که تو database دارم رو بررسی کنه ،و فقط اون رکوردهایی رو تو datagridview نشون بده که مثلا قسمت ماه شون برابر 5 باشه .البته یه روش اینه که یه فیلد month توی database اضافه کنم و از اون استفاده کنم اما این روش مد نظر من نیستش .لطفا اگه روش دیگه ای سراغ دارین بگین

  2. #2
    کاربر دائمی
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تبریز
    پست
    159

    نقل قول: Database & DataGridView

    دوست عزیز راحتترین و البته بهترین راه این است که در هنگام خوانده داده ها ار فایل آنها را فیلتر کنی و فقط داد هایی که شرایط مورد نظر شما را دارند به برنامه بفرستی برای مورد شما میتوانی بصورت زیر به قسمت ماه یا روز یا سال تاریخ ذخیره شده دسترسی داشته باشد

    select * from Table1 WHERE Month(DateDay) > '5'

    این دستور select شما برای خواندن اطلاعات از بانک میباشد. table1 نام جدول موجود در فایل , DateDay نام فیلد حاوی تاریخ میباشد . عبارت فوق کلیه فیلدهایی که ماه آنها بزرگتر از 5 میباشد را به برنامه بازمیگرداند . حتما نحوه اتصال به پایگاه داده و تعریف یک متغیر جهت اتصال به آن و تنظیمات آنرا بلدی . اطلاعات حاصله را میتونی توی یک دیتاسیت بریزی و بعد با یک حلقه ساده توی دیتاست پیمایش کرده و اطلاعات را یکی یکی وارد دیتا گریدویو کنی

  3. #3

    نقل قول: Database & DataGridView

    با سلام
    اولا فرمتی که تاریخ رو تو پایگاه داده ذخیره می کنین چی هستش
    اگه DateTime باشه شما فیلد تاریخ رو بگیر و به تبدیل DateTime کن و بعد به فیلد Month رو چک کن ببین مساوی با 5 هستش یا نه
    و اگه به صورت یک رشته ذخیره کردی اول اونو با استفاده از دستور Split جداش کن و به صورت زیر چک کن

    فرض می کنیم که تاریخ توی رشته MyDate باشه

                string MyDate = "1388/1/25";
    string[] DateSplit = MyDate.Split('/');
    if (DateSplit[1] == "5" || DateSplit[1] == "05")
    {
    //Your Code
    }


    مثلا در این کد DateSplit[1] برابر با رشته 1 هستش.

  4. #4

    نقل قول: Database & DataGridView

    دوست عزیر rnm123 اگه تاریخ به صورت شمسی باشه فکر نکنم دستور شما کار کنه

  5. #5
    کاربر دائمی
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تبریز
    پست
    159

    نقل قول: Database & DataGridView

    نقل قول نوشته شده توسط rezatati مشاهده تاپیک
    دوست عزیر rnm123 اگه تاریخ به صورت شمسی باشه فکر نکنم دستور شما کار کنه
    فکر می کنم تارخ شمسی را مستقیما نمی توان در پایگاه داده ذخیره کرد خطای ( خارج از محدوده ) میدهد. پس الزاما تاریخ میلادی خواهد بود و باید در کد برنامه به شمسی تبدیل شود . البته اگر بصورت رشته ذخیره شود این امر امکان پذیر خواهد بود و البته در آن صورت کد بنده کارنخواهد کرد چون نوع فیلد اصلا از نوع dateTime نیست که sql بتواند قسمت ماه یا سال یا روز آنرا جدا کند

  6. #6

    نقل قول: Database & DataGridView

    من هم فکر نکنم که تو یک نرم افزار فارسی تاریخ میلادی به درد بخوره ولی من هر دو روش رو گفتم که البته اگه تاریخ به صورت dateTime در پایگاه داده ذخیره بشه روش دوستمون rnm123 خیلی بهتره چون در این مورد رکوردهایی که به درد نخور هستند از پایگاه استخراج نمی شن ولی اگه رشته باشه باید از روشی که در بالا گفته شده استفاده کنین البته شاید دوستان روش بهتر ی بلدند ولی ما این به ذهنمون رسید

  7. #7
    کاربر دائمی آواتار mom alone
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    ایران
    سن
    41
    پست
    196

    نقل قول: Database & DataGridView

    من تاریخ رو به صورت رشته و حتما با 10 کاراکتر وارد می کنم مثلا 1387/01/01
    حالا برای سلکت شما

    where table.tarikh like %/05/%



    من یه لحظه قاطی کردم نمی دونم علامت درصد باید باشه یا ستاره
    خودت امتحان کن
    من هیچ مشکلی با تاریخ ندارم(به صورت رشته)
    شما هم همین کارو بکن تو شرط >= و <= هم جواب میده
    مانند تاریخ واقعی

  8. #8
    کاربر دائمی آواتار asd_moghadas
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    اصفهان
    پست
    143

    نقل قول: Database & DataGridView

    سلام چطوری میتوان تاریخ میلادی رادر دیتاگریدویو به شمسی تیدیل کرد بعد از دستور selectبه جدول مورد نظر لطفا راهنمایی کنید

  9. #9
    کاربر دائمی آواتار asd_moghadas
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    اصفهان
    پست
    143

    نقل قول: Database & DataGridView

    سلام چطوری میتوان تاریخ میلادی رادر دیتاگریدویو به شمسی تیدیل کرد بعد از دستور selectبه جدول مورد نظر لطفا راهنمایی کنید درمورد فایل ضمیمه اگه کسی میتونه کمک کنه

  10. #10
    کاربر دائمی آواتار Happy_davood
    تاریخ عضویت
    دی 1383
    محل زندگی
    تبریز
    سن
    45
    پست
    306

    نقل قول: Database & DataGridView

    ذخیره تاریخ بصورت میلادی خیلی کارآمد تر از روش رشته ای هست .
    ضمناً برای تبدیل هم نباید سمت برنامه کاری انجام بدید . باید یه Function سمت DB داشته باشید که میلادی رو گرفته و شمسی می ده . بعدش اینطوری یه Select بزنید و Grid رو پر کنید :


    SELECT dbo.ToSolarDate(ChristionDateTime) FROM AnyTable


    این Function هم باید همچین چیزی باشه :


    CREATE FUNCTION GetSolarDate (@DateTime DATETIME)
    RETURNS CHAR(10) AS
    BEGIN
    .
    .
    .
    RETURN @DateString
    END

    ذخیره کردن میلادی هم کارامد تر هست چون میتونید از توابع و امکانان استاندار هم سمت DB و هم سمت برنامه استفاده کنید

  11. #11
    کاربر دائمی آواتار asd_moghadas
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    اصفهان
    پست
    143

    نقل قول: Database & DataGridView

    تشکر از Happy_davood اگه ممکنه بیشتر راهنمایی کنید یکی از دوستان این روش راپیشنهادداد اما نتوانستم استفاده کنم
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Data.SqlClient;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    namespace MyTest
    {
    public partial class Form1 : Form
    {
    private SqlConnection SqlCon;
    private SqlCommand SqlCmd;
    private SqlDataAdapter SqlDA;
    private DataTable DTable;
    private long Id;
    private long Cal;
    public Form1()
    {
    InitializeComponent();
    }
    private void Binding()
    {
    //try
    //{
    //DateTime dt = Convert.ToDateTime(FarsiLibrary.Utils.PersianDateC onverter.ToPersianDate(DateEtebar22.SelectedDateTi me));
    SqlCon = new SqlConnection();
    SqlCon.ConnectionString = MyTest.Properties.Settings.Default.MyTestConnectio nString;
    SqlCon.Open();
    SqlCmd = new SqlCommand();
    SqlCmd.Connection = SqlCon;
    SqlCmd.CommandType = CommandType.Text;
    SqlCmd.CommandText = "SELECT *FROM MyDate"; //WHERE (ID=@Id)";
    //SqlCmd.Parameters.Add("@Id", SqlDbType.BigInt).Value = Id;

    SqlDA = new SqlDataAdapter();
    SqlDA.SelectCommand = SqlCmd;
    SqlCmd.ExecuteNonQuery();
    DTable = new DataTable();
    SqlDA.Fill(DTable);
    dataGridView1.DataSource = DTable;
    // SqlCon.Close();
    //dataGridView1.Rows.Clear();
    //if (DTable.Rows.Count > 0)
    //{
    // FarsiLibrary.Utils.PersianDate p1, p2;
    // DataRow[] Drows = new DataRow[DTable.Rows.Count];
    // DTable.Rows.CopyTo(Drows, 0);
    // for (int i = 0; i < Drows.Length - 1; i++)
    // {
    // for (int j = i + 1; j < Drows.Length; j++)
    // {
    // p1 = FarsiLibrary.Utils.PersianDateConverter.ToPersianD ate((DateTime)Drows[i].ItemArray[6]);
    // p2 = FarsiLibrary.Utils.PersianDateConverter.ToPersianD ate((DateTime)Drows[j].ItemArray[6]);
    // if (p1 > p2)
    // {
    // DataRow dr;
    // dr = Drows[i];
    // Drows[i] = Drows[j];
    // Drows[j] = dr;
    // }
    // }
    // }
    // for (int j = 0; j < Drows.Length; j++)
    // {
    // DateTime Persian = FarsiLibrary.Utils.PersianDateConverter.ToPersianD ate((DateTime)Drows[j].ItemArray[6]);
    // if (Persian >= DateEtebar22.SelectedDateTime)
    // {
    // if ((byte)Drows[j].ItemArray[4] == 1)
    // {
    // Cal += (long)Drows[j].ItemArray[8];
    // dataGridView1.Rows.Add(++counter, Persian, Drows[j].ItemArray[1], Drows[j].ItemArray[1]
    // , 0, Drows[j].ItemArray[8], Cal);
    // }
    /*if (((byte)Drows[j].ItemArray[4] == 3) || ((byte)Drows[j].ItemArray[4] == 4))
    {
    Cal -= (long)Drows[j].ItemArray[8];
    dataGridView1.Rows.Add(++counter, Persian, Drows[j].ItemArray[2], Drows[j].ItemArray[5]
    , Drows[j].ItemArray[8], 0, Cal);
    }*/
    //}
    SqlCon.Close();

    //catch (Exception ex)
    //{
    // MessageBox.Show(ex.Message);
    //}
    //finally
    //{
    // SqlCon.Close();
    //}

    }
    private void Form1_Load(object sender, EventArgs e)
    {
    Binding();
    }
    }
    }

  12. #12
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    تهران
    پست
    1,025

    نقل قول: Database & DataGridView

    این کدها هم توابع تبدیل تاریخ رو در Sql میسازه
    البته از همین سایت گرفتمشون ولی یادم نیست از کجاش بنابر این ذکر منبع میسر نیست



    CREATE FUNCTION GetFarsiDate(@DateLatin AS DateTime)
    RETURNS CHAR(10) AS
    BEGIN
    DECLARE @DateFarsi CHAR(10)
    DECLARE @Days int
    DECLARE @Tmp int
    DECLARE @Year_Farsi int
    DECLARE @Month_Farsi int
    DECLARE @Day_Farsi int
    SET @Days = DATEDIFF(DAY, '19000320', @DateLatin)
    SET @Year_Farsi = 1279
    SET @Month_Farsi = 01
    SET @Day_Farsi = 01
    SET @Tmp = @Days / 365
    IF (@Tmp * 365) + ((@Tmp + 3) / 4) > @Days
    SET @Tmp = @Tmp - 1
    SET @Year_Farsi = @Year_Farsi + @Tmp
    SET @Days = @Days - (@Tmp * 365) - ((@Tmp + 3) / 4)

    IF @Days <= 186
    BEGIN
    SET @Tmp = @Days / 31
    SET @Month_Farsi = @Month_Farsi + @Tmp
    SET @Days = @Days - (@Tmp * 31)
    END
    ELSE
    BEGIN
    SET @Days = @Days - 186
    SET @Tmp = @Days / 30
    SET @Month_Farsi = @Month_Farsi + @Tmp + 6
    SET @Days = @Days - (@Tmp * 30)
    END
    SET @Day_Farsi = @Day_Farsi + @Days
    RETURN REPLACE(STR(@Year_Farsi, 4, 0) +
    STR(@Month_Farsi, 2, 0) +
    STR(@Day_Farsi,2, 0), ' ', '0')
    END




    CREATE FUNCTION GetLatinDate(@DateFarsi CHAR(10))
    RETURNS DateTime AS
    BEGIN
    SET @DateFarsi = REPLACE(@DateFarsi, '/', '')

    DECLARE @Days BigInt

    DECLARE @Year_Farsi int
    DECLARE @Month_Farsi int
    DECLARE @Day_Farsi int

    SET @Year_Farsi = CONVERT(int, SUBSTRING(@DateFarsi, 1, 4))
    SET @Month_Farsi = CONVERT(int, SUBSTRING(@DateFarsi, 5, 2))
    SET @Day_Farsi = CONVERT(int, SUBSTRING(@DateFarsi, 7, 2))

    SET @Days = ((@Year_Farsi - 1279) * 365) + ((@Year_Farsi - 1276) / 4)

    IF @Month_Farsi <= 7
    SET @Days = @Days + ((@Month_Farsi - 1) * 31)
    ELSE
    SET @Days = @Days + ((@Month_Farsi - 7) * 30) + 186

    RETURN DATEADD(DAY, @Days + @Day_Farsi - 1, '19000320')
    End



  13. #13
    کاربر دائمی آواتار Happy_davood
    تاریخ عضویت
    دی 1383
    محل زندگی
    تبریز
    سن
    45
    پست
    306

    نقل قول: Database & DataGridView

    خوب روشی رو که آقای asd_moghadas نوشتن خیلی پیچیده تر هست . همیشه در همه فرم ها باید کلی کد نوشت تا که مشکل تاریخ حل بشه در حالیکه روش تبدیل سمت DB بسیار راحتره (سرعت اجرا ، پیچیدگی کد ...)
    اگر آقای NewFoxStudent از صحت توابعی که گذاشتن اطمینان ندارند بگید تا من مال خودم رو بفرستم .
    البته در سمت DB نیازی به تبدیل شمسی به میلادی نیست . چون تمام تاریخ ها از سمت برنامه به میلادی تبدیل شده و به DB پاس می شوند و فقط تبدیل میلادی به شمسی کافیه .

  14. #14
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    تهران
    پست
    1,025

    نقل قول: Database & DataGridView

    توابعی که من گذاشتم کاملاً درست کار میکنه و خیلی وقته دترم ازشون استفاده میکنم
    تا حالا مشکلی نداشتن

  15. #15
    کاربر دائمی آواتار asd_moghadas
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    اصفهان
    پست
    143

    نقل قول: Database & DataGridView

    اگه ممکنه happy_davoodان راهم بگذارید

  16. #16
    کاربر دائمی آواتار Happy_davood
    تاریخ عضویت
    دی 1383
    محل زندگی
    تبریز
    سن
    45
    پست
    306

    نقل قول: Database & DataGridView





    CREATE FUNCTION GetSolarDate (@DateTime DATETIME)
    RETURNS CHAR(10) AS
    BEGIN
    IF (@DateTime = '')
    RETURN ''

    DECLARE @yy AS INT -- year
    DECLARE @mm AS INT -- month
    DECLARE @dd AS INT -- day

    DECLARE @DateString AS NVARCHAR(10) -- yy/mm/dd

    DECLARE @M1 AS INT -- days of month 1
    DECLARE @M2 AS INT -- days of month 2
    DECLARE @M3 AS INT -- days of month 3
    DECLARE @M4 AS INT -- days of month 4
    DECLARE @M5 AS INT -- days of month 5
    DECLARE @M6 AS INT -- days of month 6
    DECLARE @M7 AS INT -- days of month 7
    DECLARE @M8 AS INT -- days of month 8
    DECLARE @M9 AS INT -- days of month 9
    DECLARE @M10 AS INT -- days of month 10
    DECLARE @M11 AS INT -- days of month 11

    DECLARE @Total AS INT -- total days of miladi date
    DECLARE @TotalSolar AS INT -- total days of solar date

    SET @M1 = 31
    SET @M2 = 28
    SET @M3 = 31
    SET @M4 = 30
    SET @M5 = 31
    SET @M6 = 30
    SET @M7 = 31
    SET @M8 = 31
    SET @M9 = 30
    SET @M10 = 31
    SET @M11 = 30

    -- get yy , mm , dd from DateTime
    -- *****************************************
    SET @yy = DATEPART(YEAR, @DateTime)
    SET @mm = DATEPART(MONTH, @DateTime)
    SET @dd = DATEPART(DAY, @DateTime)

    IF @yy % 4 = 0 -- leap year
    SET @M2 = 29

    -- calculating total days of miladi year
    -- *****************************************
    IF @mm = 1
    SET @Total = @dd
    IF @mm = 2
    SET @Total = @dd + @M1
    IF @mm = 3
    SET @Total = @dd + @M1 + @M2
    IF @mm = 4
    SET @Total = @dd + @M1 + @M2 + @M3
    IF @mm = 5
    SET @Total = @dd + @M1 + @M2 + @M3 + @M4
    IF @mm = 6
    SET @Total = @dd + @M1 + @M2 + @M3 + @M4 + @M5
    IF @mm = 7
    SET @Total = @dd + @M1 + @M2 + @M3 + @M4 + @M5 + @M6
    IF @mm = 8
    SET @Total = @dd + @M1 + @M2 + @M3 + @M4 + @M5 + @M6 + @M7
    IF @mm = 9
    SET @Total = @dd + @M1 + @M2 + @M3 + @M4 + @M5 + @M6 + @M7 + @M8
    IF @mm = 10
    SET @Total = @dd + @M1 + @M2 + @M3 + @M4 + @M5 + @M6 + @M7 + @M8 + @M9
    IF @mm = 11
    SET @Total = @dd + @M1 + @M2 + @M3 + @M4 + @M5 + @M6 + @M7 + @M8 + @M9 + @M10
    IF @mm = 12
    SET @Total = @dd + @M1 + @M2 + @M3 + @M4 + @M5 + @M6 + @M7 + @M8 + @M9 + @M10 + @M11

    -- calculating yy of solar year
    -- *****************************************
    IF @Total <= 79
    SET @yy = @yy - 622
    ELSE
    SET @yy = @yy - 621

    -- calculating total days of solar year
    -- *****************************************
    IF @Total > 79 -- ater new solar year
    SET @TotalSolar = @Total - 79
    ELSE -- before new solar year
    BEGIN
    IF ((@yy + 1) % 4 = 0) -- leap year
    SET @TotalSolar = @Total + 287
    ELSE -- normal year
    SET @TotalSolar = @Total + 286
    END

    -- calculating mm, dd of solar year
    -- *****************************************
    IF @TotalSolar <= 186 -- 1st half of solar year
    BEGIN
    SET @mm = 1
    WHILE @TotalSolar > 31
    BEGIN
    SET @TotalSolar = @TotalSolar - 31
    SET @mm = @mm + 1
    END
    END
    ELSE -- 2nd half of solar year
    BEGIN
    SET @TotalSolar = @TotalSolar - 186
    SET @mm = 7
    WHILE @TotalSolar > 30
    BEGIN
    SET @TotalSolar = @TotalSolar - 30
    SET @mm = @mm + 1
    END
    END

    SET @dd = @TotalSolar

    -- SET @yy = @yy % 100 -- 2 least digits (0~99)

    SET @DateString = LTRIM(RTRIM(STR(@yy/ 1000))) -- y : 1000
    SET @DateString = @DateString + LTRIM(RTRIM(STR(@yy % 1000) / 100)) -- yy : 100
    SET @DateString = @DateString + LTRIM(RTRIM(STR(@yy % 100)/ 10)) -- yyy : 10
    SET @DateString = @DateString + LTRIM(RTRIM(STR(@yy % 10))) -- yyyy : 1
    SET @DateString = @DateString + '/' -- yyyy/
    SET @DateString = @DateString + LTRIM(RTRIM(STR(@mm / 10))) -- yyyy/m
    SET @DateString = @DateString + LTRIM(RTRIM(STR(@mm % 10))) -- yyyy/mm
    SET @DateString = @DateString + '/' -- yyyy/mm/
    SET @DateString = @DateString + LTRIM(RTRIM(STR(@dd / 10))) -- yyyy/mm/d
    SET @DateString = @DateString + LTRIM(RTRIM(STR(@dd % 10))) -- yyyy/mm/dd

    RETURN @DateString
    END


  17. #17
    کاربر دائمی آواتار Happy_davood
    تاریخ عضویت
    دی 1383
    محل زندگی
    تبریز
    سن
    45
    پست
    306

    نقل قول: Database & DataGridView

    به نظر میرسه مال آقای NewFoxStudent بهینه و خلاصه هست .
    از همون استفاده کنید . البته من چند سالی هست که از همین استفاده می کنم و ایرادی هم نداره و خودم هم نوشتمش .
    منتهی اون زمان ناشی تر بودم و زیاد شاید خوب و بهینه نباشه .

  18. #18
    کاربر دائمی آواتار asd_moghadas
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    اصفهان
    پست
    143

    نقل قول: Database & DataGridView

    راهنمایی در مورد استفاده از توابع فوق چگونه وچطور فوری ممنون

  19. #19
    کاربر دائمی آواتار Happy_davood
    تاریخ عضویت
    دی 1383
    محل زندگی
    تبریز
    سن
    45
    پست
    306

    نقل قول: Database & DataGridView

    قبلاً گفتم دیگه به جای اینکه برای پر کردن دیتاگردی این Select رو بزندی :


    SELECT Date, Name, Family, .... FROM AnyTable


    به جاش این رو بزنید :


    SELECT dbo.GetSolarDate(Date) AS Date, Name, Family, .... FROM AnyTable

    GetSolarDate هم همون تابعی هست که من و یکی از دوستان قبلاً گذاشتیم براتون (که باید در قسمت User Defined Functions قرار گرفته بشه)

  20. #20

    نقل قول: Database & DataGridView

    ممنون از راهنماییتون

  21. #21

    نقل قول: Database & DataGridView

    سلام به دوستان.من یه برنامه ساده نوشتم که توی اون از SQL موجود در C#‎‎‎‎ استفاده کردم. موقعی که برنامه RUNهست به راحتی می تونم اطلاعات رو توی DataGridView بریزم و یا بخونم. ولی وقتیکه برنامه رو می بندم و مجدداً باز می کنم هیچکدوم از اطلاعاتی رو که saveکرده بودم رو نشون نمیده. میشه لطفاً منو راهنمایی کنید؟

    privatevoid btnSave_Click(object sender, EventArgs e)
    {
    SqlConnection conn = newSqlConnection();
    conn.ConnectionString = @"Data Source=.\SQLEXPRESS;
    AttachDbFilename=|DataDirectory|\Vehicle.mdf;
    Integrated Security=True;
    User Instance=True"
    ;
    conn.Open();
    SqlCommand cmd = newSqlCommand();
    cmd.Connection = conn;
    string sql = "insert into TAG (No,Name,Tag,Location,State)";
    sql += "values({0},'{1}','{2}','{3}','{4}')";
    sql = string.Format(sql,txtNo.Text, txtName.Text, txtID.Text, txtLocation.Text, txtState.Text);
    cmd.CommandText = sql;
    cmd.ExecuteNonQuery();
    this.Close();
    }

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •