Firstly, I would recommend adding a few breakpoints and checking some values as the code runs and see if you can find where things go wrong. It might even be that the value in the database is NULL.
Sooner or later we all have to learn to debug, might as well start early.
Secondly, Make your that the number of rows returned in your database query aren't less than the number of times your loop runs. I'm guessing you are running a loop based on your code:
ds.Tables("MasterMB4").Rows(i).Item("ProdDate")
I always do this:
Dim row_count As Integer = ds.Tables("Table_Name").Rows.Count - 1
If Not row_count < 0 Then
For i = 0 To row_count
If IsDBNull(ds.Tables("MasterMB4").Rows(i).Item("ProdDate"))Then
proddate_tb.Value = Date.Now
Else
proddate_tb.Value = Cdate(ds.Tables("MasterMB4").Rows(i).Item("ProdDate"))
End If
Next
End If
As for setting the datepicker. Try :
DatePicker.Value = CDate(ds.Tables("MasterMB4").Rows(i).Item("ProdDate"))