ProjectForStudy

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 180|ตอบกลับ: 6

[ถาม/ตอบ] Error : object reference not set to an instance of an object

[คัดลอกลิงก์]
  • อารมณ์วันนี้
    แฮปปี้
    11 ชั่วโมงที่แล้ว
  • เช็คชื่อแล้ว: 488 วัน

    [LV.9]ConquerorII

    32

    กระทู้

    557

    โพสต์

    1257

    เครดิต

    HawkBrain

    Rank: 4

    เครดิต
    1257
    Ticket
    362
    จิตพิสัย
    895
    แก้ไขครั้งสุดท้ายโดย artxyy14 เมื่อ 2019-8-30 08:32

    สวัสดีครับ ผมต้อง Query Data ดังตามภาพแล้วเกิดปัญหา  ซึ่งผมลองเอา Code ไป Run ใน SQL Server ข้อมูลผลลัพธ์ถูกต้อง แต่พอนำมาใช้ในการเขียนโปรแกรมพอ Run แล้ว Error object reference not set to an instance of an object  สามารถจะเช็คตรงไหนได้ครับ

    ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

    คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

    x
  • อารมณ์วันนี้
    แฮปปี้
    18 ชั่วโมงที่แล้ว
  • เช็คชื่อแล้ว: 410 วัน

    [LV.9]ConquerorII

    31

    กระทู้

    799

    โพสต์

    5083

    เครดิต

    RapterClaw

    Rank: 5Rank: 5

    เครดิต
    5083
    Ticket
    3197
    จิตพิสัย
    1886

    Merciful MemberInstructor

    puklit โพสต์ 2019-9-14 08:36:47 | ดูโพสต์ทั้งหมด
    ปรกติถ้ารัน SQL Command ผ่าน Database ได้โปรแกรมที่เรียกใช้งานก็สามารถใช้งานได้อยู่แล้วครับ
    ให้ท่านดูโค้ดใน บรรทัดนี้ว่าใช้งานถูกต้องหรือไม่

    DA.Fill(DS,"Comparison")
    DT2 = DS.Table("Comparison")
  • อารมณ์วันนี้
    แฮปปี้
    11 ชั่วโมงที่แล้ว
  • เช็คชื่อแล้ว: 488 วัน

    [LV.9]ConquerorII

    32

    กระทู้

    557

    โพสต์

    1257

    เครดิต

    HawkBrain

    Rank: 4

    เครดิต
    1257
    Ticket
    362
    จิตพิสัย
    895
     เจ้าของ| artxyy14 โพสต์ 2019-9-14 09:18:44 | ดูโพสต์ทั้งหมด
    ผมตรวจสอบดูแล้วถูกต้องนะครับ  เพราะ "Comparison" เป็นชื่อตัวแปรที่สร้างขึ้นมาเก็บข้อมูลของTableนี้
  • อารมณ์วันนี้
    แฮปปี้
    18 ชั่วโมงที่แล้ว
  • เช็คชื่อแล้ว: 410 วัน

    [LV.9]ConquerorII

    31

    กระทู้

    799

    โพสต์

    5083

    เครดิต

    RapterClaw

    Rank: 5Rank: 5

    เครดิต
    5083
    Ticket
    3197
    จิตพิสัย
    1886

    Merciful MemberInstructor

    puklit โพสต์ 2019-9-14 10:27:25 | ดูโพสต์ทั้งหมด
    artxyy14 ตอบกลับเมื่อ 2019-9-14 09:18
    ผมตรวจสอบดูแล้วถูกต้องนะครับ  เพราะ "Comparison" เป็นชื่อตัวแปรที่สร้างขึ้นมาเก็บข้อมูลของTableนี้

    SqlDataAdapter
    https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqldataadapter?view=netframework-4.8



    DataAdapter.Fill มี Overaloads 4 ตัวดังนี้ (ท่านใช้ Overloads ตัวใหน)

    https://docs.microsoft.com/en-us/dotnet/api/system.data.common.dataadapter.fill?view=netframework-4.8



    ตัวอย่างการใช้งาน จาก StackOverflow
    https://stackoverflow.com/questions/6532304/dataadapter-filldataset

    ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

    คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

    x
  • อารมณ์วันนี้
    แฮปปี้
    18 ชั่วโมงที่แล้ว
  • เช็คชื่อแล้ว: 410 วัน

    [LV.9]ConquerorII

    31

    กระทู้

    799

    โพสต์

    5083

    เครดิต

    RapterClaw

    Rank: 5Rank: 5

    เครดิต
    5083
    Ticket
    3197
    จิตพิสัย
    1886

    Merciful MemberInstructor

    puklit โพสต์ 2019-9-14 11:27:23 | ดูโพสต์ทั้งหมด
    แก้ไขครั้งสุดท้ายโดย puklit เมื่อ 2019-9-14 16:27

    ผมมีอีกตัวอย่างให้ดูครับโค้ดของผมเองเป็น C#
    เพื่อเป็นการลดความซับซ้อนของการเขียนโปรแกรม

    ผมสร้าง Class ชื่อว่า ClsGridview
    ภายในมี Method ชื่อว่า Data_To_Gridview
    ซึ่ง Method มีพารามิเตอร์ดังนี้
    (string sqlstr, string tblName, GridControl Grid_Name)
    string sqlstr = คำสั่ง Sql command
    string tblName = ชื่อตาราง
    GridControl Grid_Name = GridControl (เป็น Control ของ DevExpress ซึ่งคล้าย ๆ DataGridView) แต่ประสิทธิภาพและลูกเล่นต่างกันเยอะ

    ตัวอย่างโค้ดที่ Class ClsGridview


    ตัวอย่างโค้ดตอนฟอร์ม หรือ Class อื่น ๆ เรียกใช้งาน

    ตัวอย่างที่ 1 (แบบ Join ตาราง)


    ตัวอย่างที่ 2 (มีการเรียกฟังก์ชั่นที่เขียนฝังใน Database มาใช้งานในคำสั่ง Sql command ด้วย ตามกรอบสีเขียว


    ตัวอย่างโค้ด TSQL ใน Database ที่เขียนเป็นฟังก์ชั่นเอาไว้
    1. ALTER FUNCTION [dbo].[MAN_CALC_AGE]
    2. (
    3.         -- Add the parameters for the function here
    4.         @VAR_FROM_DATE DATETIME ,@VAR_TO_DATE DATETIME ,@OUTPUT_PATTERN INT
    5. )
    6.         RETURNS VARCHAR(100)
    7. AS
    8. BEGIN
    9.         -- Declare the return variable here
    10.         DECLARE @TEMP               INT ;
    11.         DECLARE @FROM_DATE          DATETIME ;
    12.         DECLARE @TO_DATE            DATETIME ;
    13.         DECLARE @TEMP_DATE          DATETIME ;
    14.         DECLARE @CARRY_FLAG         INT ;
    15.         DECLARE @MY_YEAR            INT ;
    16.         DECLARE @MY_MONTH           INT ;
    17.         DECLARE @MY_DAY             INT ;
    18.         DECLARE @RET_STR            VARCHAR(100) ;

    19.         SET @CARRY_FLAG = 0 ;

    20.         -- REORDER
    21.         IF (DATEDIFF(DAY ,@VAR_FROM_DATE ,@VAR_TO_DATE) >= 0 )
    22.         BEGIN
    23.                 SET @FROM_DATE = @VAR_FROM_DATE;
    24.                 SET @TO_DATE = @VAR_TO_DATE ;
    25.         END
    26.         ELSE
    27.         BEGIN
    28.                 SET @FROM_DATE = @VAR_TO_DATE;
    29.                 SET @TO_DATE = @VAR_FROM_DATE ;
    30.         END;

    31.         -- DAY CALCULATION
    32.         IF (DAY(@FROM_DATE) > DAY(@TO_DATE))
    33.         BEGIN
    34.                
    35.                 SET @TEMP_DATE = dbo.MAN_DATE_SERIAL(YEAR(@FROM_DATE) ,MONTH(@FROM_DATE) ,1) ;
    36.                 SET @TEMP_DATE = DATEADD(MONTH ,1 ,@TEMP_DATE) ;
    37.                 SET @TEMP_DATE = DATEADD(DAY ,-1 ,@TEMP_DATE) ;
    38.                 SET @CARRY_FLAG = DAY(@TEMP_DATE) ;
    39.                 SET @MY_DAY = (DAY(@TO_DATE) + @CARRY_FLAG) - DAY(@FROM_DATE) ;
    40.                 SET @CARRY_FLAG = 1 ;
    41.         END
    42.         ELSE   
    43.                 SET @MY_DAY = DAY(@TO_DATE) - DAY(@FROM_DATE) ;

    44.         -- MONTH
    45.         IF ((MONTH(@FROM_DATE) + @CARRY_FLAG) > MONTH(@TO_DATE) )
    46.         BEGIN
    47.                 SET @MY_MONTH = (MONTH(@TO_DATE) + 12) - (MONTH(@FROM_DATE) + @CARRY_FLAG) ;
    48.                 SET @CARRY_FLAG = 1 ;      
    49.         END
    50.         ELSE
    51.         BEGIN
    52.                 SET @MY_MONTH = MONTH(@TO_DATE) - (MONTH(@FROM_DATE) + @CARRY_FLAG) ;
    53.                 SET @CARRY_FLAG = 0 ;
    54.         END;

    55.         --YEAR
    56.         SET @MY_YEAR = YEAR(@TO_DATE) - (YEAR(@FROM_DATE) + @CARRY_FLAG) ;

    57.         IF (@OUTPUT_PATTERN = 99)
    58.                 SET @RET_STR = dbo.MAN_LPAD(@MY_YEAR ,4 ,'0') + '.' + dbo.MAN_LPAD(@MY_MONTH ,2 ,'0')
    59.                 + '.' + dbo.MAN_LPAD(@MY_DAY ,2 ,'0') ;
    60.         ELSE
    61.         BEGIN
    62.                 SET @RET_STR = '' ;
    63.                 --IF (@MY_YEAR > 0 )
    64.                         SET @RET_STR = CONVERT(VARCHAR(100) ,FORMAT(@MY_YEAR,'00') ) + 'Y ' ;
    65.                         --IF (@MY_MONTH>0)
    66.                                 SET @RET_STR = @RET_STR + CONVERT(VARCHAR(100) ,FORMAT(@MY_MONTH,'00') ) + 'M ' ;   
    67.                                 --IF (@MY_DAY>0)
    68.                                         SET @RET_STR = @RET_STR + CONVERT(VARCHAR(100) ,FORMAT(@MY_DAY,'00') ) + 'D ' ;      
    69.         END;

    70.         -- Return the result of the function
    71.         RETURN @RET_STR

    72. END
    คัดลอกไปที่คลิปบอร์ด


    จากตัวอย่างนี้ ผมจัดการกับโค้ดผมดังนี้
    1. จัดกลุ่มโค้ดของผมออกเป็น Class
    2. อะไรที่ต้องเขียนซ้ำกันบ่อย ๆ ทำตามข้อ 1 แล้วแยกออกเป็น
    2.1 Method
    2.2 Function

    สุดท้ายมันก็ทำให้ผมเขียนโค้ดง่ายขึ้นและเขียนสั้นลงมาก
    เช่นการ Insert / Update / Select / Delete

    ตัวอย่างคลาสในโปรแกรมผม (ให้ดูบางส่วน)


    Class data


    Class Gridview (สำหรับไว้จัดการกับ DataGridview)


    ผมเขียนไว้ครั้งเดียว ส่วนที่เหลือก็สร้าง New object แล้วเรียกไปใช้งาน
    บางทียังมีลืมเลยครับถ้าให้เขียนโค้ดเดิมขึ้นมา (555)
    มันช่วยลดเวลาท่านได้แน่นอน และใช้งานกับ Project อื่นได้ด้วย ตามแนวคิดของ OOP (Reuse นำโค้ดมาใช้ซ้ำ)


    ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

    คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

    x
  • อารมณ์วันนี้
    แฮปปี้
    11 ชั่วโมงที่แล้ว
  • เช็คชื่อแล้ว: 488 วัน

    [LV.9]ConquerorII

    32

    กระทู้

    557

    โพสต์

    1257

    เครดิต

    HawkBrain

    Rank: 4

    เครดิต
    1257
    Ticket
    362
    จิตพิสัย
    895
     เจ้าของ| artxyy14 โพสต์ 2019-9-14 19:32:36 | ดูโพสต์ทั้งหมด
    แก้ไขครั้งสุดท้ายโดย artxyy14 เมื่อ 2019-9-14 21:50
    puklit ตอบกลับเมื่อ 2019-9-14 11:27
    ผมมีอีกตัวอย่างให้ดูครับโค้ดของผมเองเป็น C#
    เพื่อเป็ ...

    ขอบคุณนะครับ จะลองเอาไปประยุกต์ใช้ดูครับ

  • อารมณ์วันนี้
    ขี้เกียจ
    2019-9-24 19:45
  • เช็คชื่อแล้ว: 4 วัน

    [LV.2]BeginnerI

    1

    กระทู้

    14

    โพสต์

    15

    เครดิต

    BabyGhost

    Rank: 1

    เครดิต
    15
    Ticket
    9
    จิตพิสัย
    6
    aree10545 โพสต์ 2019-9-17 17:22:31 | ดูโพสต์ทั้งหมด
    ขอบคุณครับ
    ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

    รายละเอียดเครดิต

    ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|ProjectForStudy  

    GMT+7, 2019-11-14 18:39 , Processed in 0.061360 second(s), 26 queries .

    Powered by Discuz! X3.2 R20150609, Rev.38

    © 2001-2013 Comsenz Inc.

    ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้