Quantcast
Channel: VBForums - Visual Basic .NET
Viewing all articles
Browse latest Browse all 27184

VS 2010 No mapping exists from object type ...... provider native type.

$
0
0
Please Help! I am a System Developer at a private company and I encounter this error while I was playing at my codes. I am using Visual Studio 2010 and my database is MSSQL 2008 R2. I keep on searching on the net for the answer but I failed. Please help me with this one and Thank you in advance.
I made this sample form for easy explaining.
The process is so simple that is only to populate the datagridview with data then save it to the database. Then on the process of saving the data I encounter an error message “No mapping exists from object type SLI_Payroll.DataSetLibrary+DTContactsDataTable to a known managed provider native type.”
This is the form.

Name:  form.png
Views: 5
Size:  6.1 KB

This is the dataset “DataSetLibrary” and the “DTContacts” is a datatable.

Name:  dataset.png
Views: 4
Size:  5.4 KB

This is the whole code for the form.
Public Class frmContacts
'------------------------------------------------------------------------------------
Private Function sp_Contacts(ByVal DT As DataTable)

zResultReturnBoolean = Nothing

Try

zCommand = SetSQLCommand("sp_tabContacts")

CON.Open()

With zCommand.Parameters
.AddWithValue("@DT", DT)
End With

zCommand.CommandType = CommandType.StoredProcedure
If zCommand.ExecuteNonQuery() = 0 Then : zResultReturnBoolean = False : Else : zResultReturnBoolean = True : End If

CON.Close()

Catch ex As Exception
CON.Close()
MessageBox.Show(ex.Message, "SQL Error!")
zResultReturnBoolean = False
End Try

Return zResultReturnBoolean

End Function
'------------------------------------------------------------------------------------
Private Sub frmContacts_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

Call TempDataTable()

End Sub
'------------------------------------------------------------------------------------
Private Sub btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click, btnSave.Click

Select Case sender.name
Case btnClose.Name
Me.Close()
Case btnSave.Name
Call SaveProcedure()
End Select

End Sub
'------------------------------------------------------------------------------------
Private Sub SaveProcedure()

Dim DTContacts As New DataSetLibrary.DTContactsDataTable

For Each dgRow As DataGridViewRow In dgList.Rows

'--Solution 1---
DTContacts.AddDTContactsRow(Val(dgRow.Cells(c_ID.Index).Value),
dgRow.Cells(c_name.Index).Value,
Format(CDate(dgRow.Cells(c_bday.Index).Value), "MM/dd/yyyy"),
dgRow.Cells(c_address.Index).Value,
dgRow.Cells(c_telNo.Index).Value)
'---------------

''--Solution 2---
'zTempDataTable.Rows.Add(Val(dgRow.Cells(c_ID.Index).Value),
' dgRow.Cells(c_name.Index).Value,
' Format(CDate(dgRow.Cells(c_bday.Index).Value), "MM/dd/yyyy"),
' dgRow.Cells(c_address.Index).Value,
' dgRow.Cells(c_telNo.Index).Value)
''---------------
Next
'--solution 1
If sp_Contacts(DTContacts) Then
''--solution 2
'If sp_Contacts(zTempDataTable) Then
MessageBox.Show("Successfully Saved!")
End If

End Sub
'------------------------------------------------------------------------------------
Private Sub DisplayRecord()

Dim DT As New DataTable
DT = GetDataTable("SELECT * FROM tabContacts A ORDER BY A.ID")

dgList.Rows.Clear()
For Each dRow As DataRow In DT.Rows

dgList.Rows.Add()
With dgList.Rows(dgList.RowCount - 1)

.Cells(c_ID.Index).Value = Val(dRow.Item("ID").ToString)
.Cells(c_name.Index).Value = dRow.Item("name").ToString
.Cells(c_bday.Index).Value = Format(CDate(dRow.Item("bday").ToString), "MM/dd/yyyy")
.Cells(c_address.Index).Value = dRow.Item("address").ToString
.Cells(c_telNo.Index).Value = dRow.Item("telno").ToString

End With

Next

End Sub
'------------------------------------------------------------------------------------
Public Sub TempDataTable()

zTempDataTable = New DataTable

With zTempDataTable.Columns
.Add(New DataColumn("ID", GetType(Integer)))
.Add(New DataColumn("name", GetType(String)))
.Add(New DataColumn("bday", GetType(DateTime)))
.Add(New DataColumn("address", GetType(String)))
.Add(New DataColumn("telno", GetType(String)))
End With

End Sub

End Class




This is my Table, stored procedure and User-defined table type

CREATE TABLE [dbo].[tabContacts](
[ID] [int] NOT NULL,
[name] [varchar](50) NULL,
[bday] [date] NULL,
[address] [varchar](50) NULL,
[telno] [nchar](10) NULL,
CONSTRAINT [PK_tabContacts] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
'------------------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[sp_tabContacts]

@DT dbo.type_tabContacts READONLY
AS
BEGIN

SET NOCOUNT ON;

MERGE INTO tabContacts as A
USING(SELECT ID,name,bday,address,telno
FROM @DT) AS B

ON A.ID = B.ID

WHEN MATCHED THEN

UPDATE SET
A.name = B.name,
A.bday = B.bday,
A.address = B.address,
A.telno = B.telno

WHEN NOT MATCHED THEN

INSERT
(
ID,name,bday,address,telno
)
VALUES
(
B.ID,B.name,B.bday,B.address,B.telno
);

END
'------------------------------------------------------------------------------------
CREATE TYPE [dbo].[type_tabContacts] AS TABLE(
[ID] [int] NOT NULL,
[name] [varchar](50) NULL,
[bday] [date] NULL,
[address] [varchar](50) NULL,
[telno] [varchar](10) NULL,
PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)
GO

This is the error. :,(

Name:  msg1.png
Views: 4
Size:  15.5 KB

...But!Wait.. :D if you will uncomment solution 2 then comment solution 1. You will get this message.

Name:  msg2.png
Views: 4
Size:  10.4 KB
Attached Images
    

Viewing all articles
Browse latest Browse all 27184

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>