Based on the posted code, I think the SELECT ... approach is more appropriate since the application is expecting a value from the table. See below.
cmd = New SqlCommand("INSERT INTO abc (Date,a) SELECT '" & regDate.ToString("MM/dd/yyyy") & "', sum(StockValue) from StockValue", sqlconn)
The posted code might not subject to SQL injection, but you should try using parameterized query
SqlCommand.Parameters Property (System.Data.SqlClient)[
^]