|
|
|
VB.net (Win App) ติดปัญหาการแปลง Data Type จาก DataGridView ก่อนเก็บเข้า SQL SERVER ค่ะ |
|
|
|
|
|
|
|
มีข้อมูลที่รับมาจาก Text File แล้วนำมาใส่ใน DataGrid จากนั้น Update และ Insert เข้า SQL ค่ะ
แต่ว่าติดปัญหาการแปลง Type ในส่วนของ insert ซึ่งใน DB มีอยู่ 2 Table ค่ะ
TB_LOCATION มี Field LocNo,LocType,LocPlace >> VarChar หมดเลย
TB_INVENTORY มี Field PartNo,LocNo,Instock >> Instock : Decimal
ส่วน Text File ที่รับมาจะมีข้อมูล PartNo|LocNo,|Instock|LocType|LocPlace
ลองทำทั้ง 2 แบบแล้วอ่ะค่ะ คือแบบ 1. ลองใส่ Code ไม่มีการแปลง Type สามารถ insert ได้ค่ะ
แต่ว่า จับ Try catch แล้วเกิด error ตามรูปค่ะ
1.
Code (VB.NET)
For i = 0 To DataGridView1.RowCount - 1
Dim intRows As Integer
sqlCheck = "SELECT COUNT(*) FROM TB_LOCATION WHERE LocNo = '" + DataGridView1.Rows(i).Cells(1).Value + "'"
cmd = New SqlCommand(sqlCheck, con)
intRows = cmd.ExecuteScalar()
If intRows > 0 Then
LisFindUp = True
cmd.CommandText = "UPDATE TB_LOCATION SET " & " LocType = '" & CStr(DataGridView1.Rows(i).Cells(3).Value) & "', LocPlace = '" & CStr(DataGridView1.Rows(i).Cells(4).Value) & "' WHERE LocNo = '" & DataGridView1.Rows(i).Cells(1).Value & "'"
cmd.ExecuteNonQuery()
Else
IsFindAdd = True
SqlIns2 = "INSERT INTO TB_LOCATION (LocNo,LocType,LocPlace) VALUES(@LocNo,@LocType,@Place)"
cmd = New System.Data.SqlClient.SqlCommand(SqlIns2, con)
cmd.Parameters.Add(New SqlParameter("@LocNo", DataGridView1.Rows(i).Cells(1).Value))
cmd.Parameters.Add(New SqlParameter("@LocType", DataGridView1.Rows(i).Cells(3).Value))
cmd.Parameters.Add(New SqlParameter("@Place", DataGridView1.Rows(i).Cells(4).Value))
cmd.ExecuteNonQuery()
End If
Dim intRows2 As Integer
sqlCheck = "SELECT COUNT(*) FROM TB_INVENTORY WHERE PartNo = '" + DataGridView1.Rows(i).Cells(0).Value + "' AND LocNo = '" + DataGridView1.Rows(i).Cells(1).Value + "'"
cmd = New SqlCommand(sqlCheck, con)
intRows2 = cmd.ExecuteScalar()
If intRows2 > 0 Then
LisFindUp = True
cmd.CommandText = "UPDATE TB_INVENTORY SET " & " Instock = '" & CDec(DataGridView1.Rows(i).Cells(2).Value) & "' WHERE PartNo = '" + DataGridView1.Rows(i).Cells(0).Value + "' AND LocNo = '" + DataGridView1.Rows(i).Cells(1).Value + "'"
cmd.ExecuteNonQuery()
Else
IsFindAdd = True
SqlIns = "INSERT INTO TB_INVENTORY (PartNo,LocNo,Instock) VALUES(@PartNo,@LocNo,@Instock)"
cmd = New System.Data.SqlClient.SqlCommand(SqlIns, con)
cmd.Parameters.Add(New SqlParameter("@PartNo", DataGridView1.Rows(i).Cells(0).Value))
cmd.Parameters.Add(New SqlParameter("@LocNo", DataGridView1.Rows(i).Cells(1).Value))
cmd.Parameters.Add(New SqlParameter("@Instock", DataGridView1.Rows(i).Cells(2).Value))
cmd.ExecuteNonQuery()
End If
Next
2. ลองใส่แปลง Type (ไม่แน่ใจว่าใส่ถูกหรือเปล่า) ในส่วนของ insert อย่างเดียว แล้ว Try catch เหมือนกันค่ะ
Code และ error ตามรูปค่ะ ซึ่งงงมากเลย ที่เป็น Varchar อยู่แล้ว แต่ insert ไม่ได้ รบกวนขอคำแนะนำด้วยนะค่ะ^^
Code (VB.NET)
SqlIns2 = "INSERT INTO TB_LOCATION (LocNo,LocType,LocPlace) VALUES(@LocNo,@LocType,@Place)"
cmd = New System.Data.SqlClient.SqlCommand(SqlIns2, con)
cmd.Parameters.Add(New SqlParameter("@LocNo", SqlDbType.VarChar = DataGridView1.Rows(i).Cells(1).Value))
cmd.Parameters.Add(New SqlParameter("@LocType", SqlDbType.VarChar = DataGridView1.Rows(i).Cells(3).Value))
cmd.Parameters.Add(New SqlParameter("@Place", SqlDbType.VarChar = DataGridView1.Rows(i).Cells(4).Value))
cmd.ExecuteNonQuery()
SqlIns = "INSERT INTO TB_INVENTORY (PartNo,LocNo,Instock) VALUES(@PartNo,@LocNo,@Instock)"
cmd = New System.Data.SqlClient.SqlCommand(SqlIns, con)
cmd.Parameters.Add(New SqlParameter("@PartNo", SqlDbType.VarChar = DataGridView1.Rows(i).Cells(0).Value))
cmd.Parameters.Add(New SqlParameter("@LocNo", SqlDbType.VarChar = DataGridView1.Rows(i).Cells(1).Value))
cmd.Parameters.Add(New SqlParameter("@Instock", SqlDbType.Decimal = DataGridView1.Rows(i).Cells(2).Value))
cmd.ExecuteNonQuery()
Tag : .NET, Ms SQL Server 2008, Win (Windows App), VB.NET, Windows
|
|
|
|
|
|
Date :
2014-03-13 20:22:35 |
By :
Menerva |
View :
1060 |
Reply :
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (C#)
SqlParameter createdon = new SqlParameter("@createdon", SqlDbType.DateTime, 50);
createdon.Value = DateTime.Now;
cmd.Parameters.Add(createdon);
น่าตะประมาณนี้ครับ
|
|
|
|
|
Date :
2014-03-14 10:03:09 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองดูแล้วและได้แล้วค่ะ ขอบคุณมากมายค่ะ
|
|
|
|
|
Date :
2014-03-15 17:12:53 |
By :
menerva |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Date :
2014-03-17 06:37:21 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|