BTC USD 81,149.5 Gold USD 4,378.12
Time now: Jun 1, 12:00 AM

[Tutorial]Belajar Programming .NET Language

amekawwww...sekali masta post...mantap bro...mmg boleh jadi lecturer ni...
 
Untuk VB... untuk asas INSERT kedalam SQL, boleh cuba guna kaedah ini.. :

Code:
Dim con As New SqlConnection
Dim cmd As New SqlCommand

con.ConnectionString = "connection string anda"

cmd.Connection = con
cmd.CommandText = "INSERT INTO Transaction(amount,date ) VALUES(@amount, @date)"
sqlComm.Parameters.AddWithValue("@amount", tbAmount.Text)
sqlComm.Parameters.AddWithValue("@date", tbDate.Value)

Try
con.Open()
cmd.ExecuteNonQuery()
con.Close()

Catch ex As SqlExecption

MessageBox.Show("Gagal masukkan kedalam table.." & ex.Message, "Insert Records")

Finally

End Try

Tapi dari pemerhatian saya dari code bro, bro cuba nak masukkan data mengunakan Data Grid View...

Dan sebab itu bro buat foreach dalam data grid view untuk masukkan semua record kedalam table transaction..

Betul?


Jadi apa yang saya boleh cadangkan, bro boleh cuba cara seperti ini...

Code:
For i = 0 To DGV2.Rows.Count - 1

Dim con As New SqlConnection
Dim cmd As New SqlCommand

con.ConnectionString = "connection string anda"

cmd.Connection = con
cmd.CommandText = "INSERT INTO Transaction(amount,date ) VALUES(@amount, @date)"

'Merujuk kepada column pertama dalam datagrid iaitu amount
sqlComm.Parameters.AddWithValue("@amount", Decimal.Parse(DGV2.Rows[i].Cells[0].Value.ToString()))

'Merujuk kepada column dalam datagrid kedua iaitu tarikh
sqlComm.Parameters.AddWithValue("@date", DateTime.Parse(DGV2.Rows[i].Cells[1].Value.ToString()))

Try
con.Open()
cmd.ExecuteNonQuery()
con.Close()

Catch ex As SqlException

MessageBox.Show("Gagal masukkan kedalam table.." & ex.Message, "Insert Records")

Finally
con.Dispose()
End Try

Jadi bro faham apa saya cuba explain? Kita lihat disini DGV2.Rows.Cells[0].Value.ToString()

Ianya bermaksud kita dapatkan nilai daripada pada baris pertama .Rows[1] dan juga cell daripada column pertama iaitu .Cells[0]..

Jadi, setiap kali bro buat foreach, i atau pun kita panggil Index akan menaik..Dan proses akan menjadi seperti ini

DGV2.Rows[1].Cells[0].Value.ToString()
DGV2.Rows[2].Cells[0].Value.ToString()
DGV2.Rows[3].Cells[0].Value.ToString()
'dan seterusnya

Sampai habis foreach, i tadi akan stop pada nilai terakhir...Iaitu pada akhir row data grid..:)

Yang kedua, yup bro memang bagus sebab pakai parameter. Jadi bro mesti tahu apa kelebihan mengunakan parameter.. betul?

Kebiasaanya, dalam table transaction data type amount akan pakai jenis "Decimal" dan data type date pula akan pakai jenis "DateTime"... betul?

Jadi apa kesilapan bro buat, bro tidak parse value dari datagrid ke parameter, sebab itu dia akan keluar error "conversion from type dbnull to long is not valid"....

Jadi untuk elakkan error seperti itu, bro kena tambah Decimal.Parse atau DateTime.TryParse...

Contohnya seperti ini :
Code:
'Parse dari string ke decimal
Decimal.Parse(DGV2.Rows[i].Cells[0].Value.ToString())

'Parse dari string ke datetime
DateTime.Parse(DGV2.Rows[i].Cells[1].Value.ToString())

'Dan contohnya ada data type jenis Int boleh la wat gini
int.Parse(DGV2.Rows[i].Cells[3].Value.ToString())

Jadi harap bro paham penerangan saya...:), sorry kalau ada error.. VB dah tak igt sangat... huhuhu

Happy programming....;)


bro, ada masalah x kalu null?

contoh kat sini : DGV2.Rows.Cells[0].Value.ToString()

kot kalu null process akan skip & continue sampai abis ka atau stop sbb xleh pass null value...ada kemungkinan x?:-?

why not wat checking dulu & pass value ke pembolehubah jer, kalu null maka pembolehubah hold something mcm 0 or 0.00 ka baru masuk parameter...
 
Untuk VB... untuk asas INSERT kedalam SQL, boleh cuba guna kaedah ini.. :

Code:
Dim con As New SqlConnection
Dim cmd As New SqlCommand

con.ConnectionString = "connection string anda"

cmd.Connection = con
cmd.CommandText = "INSERT INTO Transaction(amount,date ) VALUES(@amount, @date)"
sqlComm.Parameters.AddWithValue("@amount", tbAmount.Text)
sqlComm.Parameters.AddWithValue("@date", tbDate.Value)

Try
con.Open()
cmd.ExecuteNonQuery()
con.Close()

Catch ex As SqlExecption

MessageBox.Show("Gagal masukkan kedalam table.." & ex.Message, "Insert Records")

Finally

End Try

Tapi dari pemerhatian saya dari code bro, bro cuba nak masukkan data mengunakan Data Grid View...

Dan sebab itu bro buat foreach dalam data grid view untuk masukkan semua record kedalam table transaction..

Betul?


Jadi apa yang saya boleh cadangkan, bro boleh cuba cara seperti ini...

Code:
For i = 0 To DGV2.Rows.Count - 1

Dim con As New SqlConnection
Dim cmd As New SqlCommand

con.ConnectionString = "connection string anda"

cmd.Connection = con
cmd.CommandText = "INSERT INTO Transaction(amount,date ) VALUES(@amount, @date)"

'Merujuk kepada column pertama dalam datagrid iaitu amount
sqlComm.Parameters.AddWithValue("@amount", Decimal.Parse(DGV2.Rows[i].Cells[0].Value.ToString()))

'Merujuk kepada column dalam datagrid kedua iaitu tarikh
sqlComm.Parameters.AddWithValue("@date", DateTime.Parse(DGV2.Rows[i].Cells[1].Value.ToString()))

Try
con.Open()
cmd.ExecuteNonQuery()
con.Close()

Catch ex As SqlException

MessageBox.Show("Gagal masukkan kedalam table.." & ex.Message, "Insert Records")

Finally
con.Dispose()
End Try

Jadi bro faham apa saya cuba explain? Kita lihat disini DGV2.Rows.Cells[0].Value.ToString()

Ianya bermaksud kita dapatkan nilai daripada pada baris pertama .Rows[1] dan juga cell daripada column pertama iaitu .Cells[0]..

Jadi, setiap kali bro buat foreach, i atau pun kita panggil Index akan menaik..Dan proses akan menjadi seperti ini

DGV2.Rows[1].Cells[0].Value.ToString()
DGV2.Rows[2].Cells[0].Value.ToString()
DGV2.Rows[3].Cells[0].Value.ToString()
'dan seterusnya

Sampai habis foreach, i tadi akan stop pada nilai terakhir...Iaitu pada akhir row data grid..:)

Yang kedua, yup bro memang bagus sebab pakai parameter. Jadi bro mesti tahu apa kelebihan mengunakan parameter.. betul?

Kebiasaanya, dalam table transaction data type amount akan pakai jenis "Decimal" dan data type date pula akan pakai jenis "DateTime"... betul?

Jadi apa kesilapan bro buat, bro tidak parse value dari datagrid ke parameter, sebab itu dia akan keluar error "conversion from type dbnull to long is not valid"....

Jadi untuk elakkan error seperti itu, bro kena tambah Decimal.Parse atau DateTime.TryParse...

Contohnya seperti ini :
Code:
'Parse dari string ke decimal
Decimal.Parse(DGV2.Rows[i].Cells[0].Value.ToString())

'Parse dari string ke datetime
DateTime.Parse(DGV2.Rows[i].Cells[1].Value.ToString())

'Dan contohnya ada data type jenis Int boleh la wat gini
int.Parse(DGV2.Rows[i].Cells[3].Value.ToString())

Jadi harap bro paham penerangan saya...:), sorry kalau ada error.. VB dah tak igt sangat... huhuhu

Happy programming....;)


owh..yang neh aku dah nampak dah.

aku cuba coding neh malam atau esok..

kalau ok aku update, tak ok pown aku update..haha

aku rasa problem pada autonumber.

NoTransaction tue aku buat auto number.

so bila nak tambah data baru, aku SELECT MAX dari autonumber tue.

rasanyalah.
 
amekawwww...sekali masta post...mantap bro...mmg boleh jadi lecturer ni...

bro, ada masalah x kalu null?

contoh kat sini : DGV2.Rows.Cells[0].Value.ToString()

kot kalu null process akan skip & continue sampai abis ka atau stop sbb xleh pass null value...ada kemungkinan x?:-?

why not wat checking dulu & pass value ke pembolehubah jer, kalu null maka pembolehubah hold something mcm 0 or 0.00 ka baru masuk parameter...



Thanks bro.. ilmu boleh kongsi.. Insyallah mana tahu saya cuba tolong....;)


OK, merujuk kepada pertanyaan bro, Sekiranya dalam datagrid bro takda nilai atau dipanggil sebagai NULL, looping akan error sebab takleh parse format kepada seperti datetime.. Kalau tak silap saya lah..

Jadi apa yang kita boleh, kita kena check terlebih dahulu, contohnya...

Code:
if(DGV2.Rows[i].Cells[0].Value.ToString() != null)
 sqlComm.Parameters.AddWithValue("@amount", Decimal.Parse(DGV2.Rows[i].Cells[0].Value.ToString()))

else
// Letak nilai apa sepatutnya, atau letak sebagai null pun buleh.. 
sqlComm.Parameters.AddWithValue("@amount",DBNull.Value)

Sorry bro, contoh tadi untuk basic sahaja.. Dan sebetulnya, memang kita perlu check terlebih dahulu value didalam datagrid untuk elak sistem throw exception....:D

Harap faham penerangan saya...;)
 
owh..yang neh aku dah nampak dah.

aku cuba coding neh malam atau esok..

kalau ok aku update, tak ok pown aku update..haha

aku rasa problem pada autonumber.

NoTransaction tue aku buat auto number.

so bila nak tambah data baru, aku SELECT MAX dari autonumber tue.

rasanyalah.
Ok bro.. sejujurnya saya tak faham kenapa bro nak amik value no transaction daripada last ID, kemudian dimasukkan semula kedalam table transaction.. Boleh bro terangkan kepada saya?

"NoTransaction tue aku buat auto number."
Kalau tak salah saya, auto number adalah no increment..Didalam SQL management studio sendiri boleh set id table kepada nombor increment.. Ya, saya setuju dengan bro kalau melibatkan transaction memang kita pakai auto number... Takkan kita nak letak nilai satu-satu rekod kan? hehe

Kita memang tahu, id untuk transaction adalah unique. Bermaksud tidak boleh ada value yang sama dalam sesuatu table.Andai kata pun, sekiranya bro dapat ambil ID pada rekod terakhir dan masukkan semula kedalam table ianya akan tetap error pada sql server...

Biasanya, selepas kita insert sahaja rekod kedalam table. Automatik value id akan menaik... Jadi tak perlu insert sekali ID kedalam table transaction.. Sebab itu bukan lagi tugas bro untuk masukkan ID sekali...

Sekiranya bro tetap berdegil untuk meneruskan perjuangan bro. Bro boleh pakai kaedah Data Table.... Dan ada pelbagai jenis SQL untuk dapatkan ID terakhir didalam sesuatu table.. Lebih ringkas daripada guna Execute scalar..;)

Contoh MS SQL =
-"SELECT noTransaction FROM Transaction WHERE noTransaction = IDENT_CURRENT('Transaction');"
- "SELECT TOP 1 noTransaction FROM Transaction ORDER BY noTransaction DESC;"
-"SELECT MAX(noTransaction) as lastID FROM Transaction;"

Jadi bro boleh pilih je mana-mana yang sesuai.. Kalau saya, prefer pada no 1 atau 2...

Contohnya :

Code:
Dim dt as new DataTable
Dim adapter as new SqlDataAdapter("SELECT TOP 1 noTransaction FROM Transaction ORDER BY noTransaction DESC;", sqlconn.connectionstring)
adapter.fill(dt)

'Check dulu sekiranya sql return semula nilai.. Kalau ada nilai akan pass value ke variable ID

If dt.Rows.Count > 0 Then

'Dalam datatable, id asalnya didalam bentuk string. Jadi kena convert dalam bentuk Integer..

int id = int.Parse(dt.Rows[0]["noTransaction"].ToString())

End If

Happy Programming....;)
 
Ok bro.. sejujurnya saya tak faham kenapa bro nak amik value no transaction daripada last ID, kemudian dimasukkan semula kedalam table transaction.. Boleh bro terangkan kepada saya?

"NoTransaction tue aku buat auto number."
Kalau tak salah saya, auto number adalah no increment..Didalam SQL management studio sendiri boleh set id table kepada nombor increment.. Ya, saya setuju dengan bro kalau melibatkan transaction memang kita pakai auto number... Takkan kita nak letak nilai satu-satu rekod kan? hehe

Kita memang tahu, id untuk transaction adalah unique. Bermaksud tidak boleh ada value yang sama dalam sesuatu table.Andai kata pun, sekiranya bro dapat ambil ID pada rekod terakhir dan masukkan semula kedalam table ianya akan tetap error pada sql server...

Biasanya, selepas kita insert sahaja rekod kedalam table. Automatik value id akan menaik... Jadi tak perlu insert sekali ID kedalam table transaction.. Sebab itu bukan lagi tugas bro untuk masukkan ID sekali...

Sekiranya bro tetap berdegil untuk meneruskan perjuangan bro. Bro boleh pakai kaedah Data Table.... Dan ada pelbagai jenis SQL untuk dapatkan ID terakhir didalam sesuatu table.. Lebih ringkas daripada guna Execute scalar..;)

Contoh MS SQL =
-"SELECT noTransaction FROM Transaction WHERE noTransaction = IDENT_CURRENT('Transaction');"
- "SELECT TOP 1 noTransaction FROM Transaction ORDER BY noTransaction DESC;"
-"SELECT MAX(noTransaction) as lastID FROM Transaction;"

Jadi bro boleh pilih je mana-mana yang sesuai.. Kalau saya, prefer pada no 1 atau 2...

Contohnya :

Code:
Dim dt as new DataTable
Dim adapter as new SqlDataAdapter("SELECT TOP 1 noTransaction FROM Transaction ORDER BY noTransaction DESC;", sqlconn.connectionstring)
adapter.fill(dt)

'Check dulu sekiranya sql return semula nilai.. Kalau ada nilai akan pass value ke variable ID

If dt.Rows.Count > 0 Then

'Dalam datatable, id asalnya didalam bentuk string. Jadi kena convert dalam bentuk Integer..

int id = int.Parse(dt.Rows[0]["noTransaction"].ToString())

End If

Happy Programming....;)

owh..well clearly thats my false.

aku copy code tue dari sumber internet, lepas tue aku edit supaya ngam dengan form aku.

last2 error.

apa yang aku cuba buat ialah, aku akan masukkan detail dari form example dari "textbox" dan jugak "datagridview".

then dari situ bila aku tekan satu button, contohnya "save"..detail dari "textbox" dan "datagridview" tue akan masuk ke dalam database aku yang mengandungi

NoTransaction = AutoNumber
NoProduct = Number
TotalPrice = Currency
Quantity = Number
Date = Date/Time

so agak2 bro, apa method dan coding yang sesuai.
 
Thanks bro.. ilmu boleh kongsi.. Insyallah mana tahu saya cuba tolong....;)


OK, merujuk kepada pertanyaan bro, Sekiranya dalam datagrid bro takda nilai atau dipanggil sebagai NULL, looping akan error sebab takleh parse format kepada seperti datetime.. Kalau tak silap saya lah..

Jadi apa yang kita boleh, kita kena check terlebih dahulu, contohnya...

Code:
if(DGV2.Rows[i].Cells[0].Value.ToString() != null)
 sqlComm.Parameters.AddWithValue("@amount", Decimal.Parse(DGV2.Rows[i].Cells[0].Value.ToString()))

else
// Letak nilai apa sepatutnya, atau letak sebagai null pun buleh.. 
sqlComm.Parameters.AddWithValue("@amount",DBNull.Value)

Sorry bro, contoh tadi untuk basic sahaja.. Dan sebetulnya, memang kita perlu check terlebih dahulu value didalam datagrid untuk elak sistem throw exception....:D

Harap faham penerangan saya...;)

Yup, tu la yg aku nak cakapkan...BTW, sharing is caring...kipidap bro:)cgrock:)paid
 
Ok bro.. sejujurnya saya tak faham kenapa bro nak amik value no transaction daripada last ID, kemudian dimasukkan semula kedalam table transaction.. Boleh bro terangkan kepada saya?

"NoTransaction tue aku buat auto number."
Kalau tak salah saya, auto number adalah no increment..Didalam SQL management studio sendiri boleh set id table kepada nombor increment.. Ya, saya setuju dengan bro kalau melibatkan transaction memang kita pakai auto number... Takkan kita nak letak nilai satu-satu rekod kan? hehe

Kita memang tahu, id untuk transaction adalah unique. Bermaksud tidak boleh ada value yang sama dalam sesuatu table.Andai kata pun, sekiranya bro dapat ambil ID pada rekod terakhir dan masukkan semula kedalam table ianya akan tetap error pada sql server...

Biasanya, selepas kita insert sahaja rekod kedalam table. Automatik value id akan menaik... Jadi tak perlu insert sekali ID kedalam table transaction.. Sebab itu bukan lagi tugas bro untuk masukkan ID sekali...

Sekiranya bro tetap berdegil untuk meneruskan perjuangan bro. Bro boleh pakai kaedah Data Table.... Dan ada pelbagai jenis SQL untuk dapatkan ID terakhir didalam sesuatu table.. Lebih ringkas daripada guna Execute scalar..;)

Contoh MS SQL =
-"SELECT noTransaction FROM Transaction WHERE noTransaction = IDENT_CURRENT('Transaction');"
- "SELECT TOP 1 noTransaction FROM Transaction ORDER BY noTransaction DESC;"
-"SELECT MAX(noTransaction) as lastID FROM Transaction;"

Jadi bro boleh pilih je mana-mana yang sesuai.. Kalau saya, prefer pada no 1 atau 2...

Contohnya :

Code:
Dim dt as new DataTable
Dim adapter as new SqlDataAdapter("SELECT TOP 1 noTransaction FROM Transaction ORDER BY noTransaction DESC;", sqlconn.connectionstring)
adapter.fill(dt)

'Check dulu sekiranya sql return semula nilai.. Kalau ada nilai akan pass value ke variable ID

If dt.Rows.Count > 0 Then

'Dalam datatable, id asalnya didalam bentuk string. Jadi kena convert dalam bentuk Integer..

int id = int.Parse(dt.Rows[0]["noTransaction"].ToString())

End If

Happy Programming....;)

betul sangat2...:)cgrock
 
owh..well clearly thats my false.

aku copy code tue dari sumber internet, lepas tue aku edit supaya ngam dengan form aku.

last2 error.

apa yang aku cuba buat ialah, aku akan masukkan detail dari form example dari "textbox" dan jugak "datagridview".

then dari situ bila aku tekan satu button, contohnya "save"..detail dari "textbox" dan "datagridview" tue akan masuk ke dalam database aku yang mengandungi

NoTransaction = AutoNumber
NoProduct = Number
TotalPrice = Currency
Quantity = Number
Date = Date/Time

so agak2 bro, apa method dan coding yang sesuai.

bro, tngok SS interface bleh x?:-?
 
Back
Top
Log in Register