Um. Did you look at your code?
Dim rs As Integer = cmd.ExecuteScalar().ToString()
So you retrieve a value from the DB (the number of matching items), convert that to a string - which is what you say you want but I doubt it - and then store that string in a integer.
Why?
If you want an integer, just cast the ExecuteScalar return value as an Integer, don't convert it to a string first.
If you want it as a string, don't store it in an Integer variable.
And if that isn't what you want at all, then you need to start by working out what you do want and modifying your SELECT query to return that information. But we can't tell you how to do that as we don't have access to your DB or any idea what you do what to fetch!
but while we're on teh subject of your SELECT query ... Never concatenate strings to build a SQL command. It leaves you wide open to accidental or deliberate SQL Injection attack which can destroy your entire database. Always use Parameterized queries instead.
When you concatenate strings, you cause problems because SQL receives commands like:
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
The quote the user added terminates the string as far as SQL is concerned and you get problems. But it could be worse. If I come along and type this instead: "x';DROP TABLE MyTable;--" Then SQL receives a very different command:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;
Which SQL sees as three separate commands:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
A perfectly valid SELECT
DROP TABLE MyTable;
A perfectly valid "delete the table" command
And everything else is a comment.
So it does: selects any matching rows, deletes the table from the DB, and ignores anything else.
So ALWAYS use parameterized queries! Or be prepared to restore your DB from backup frequently. You do take backups regularly, don't you?