Solved

VB.net Count of records in SQL database not working

Posted on 2011-09-13
9
358 Views
Last Modified: 2012-05-12
Hi

I am using the code below to add a record to my Table1 and then
see if it is there by using a count of the number of records that
contain the three values I entered. For some resaon it always gets
a zero at the line after  '################
I have hidden my ConnectionString, which definitely works
Public Sub A()
        Dim oDate As String = "10/10/2011" 'Date.Now.ToString
        Dim oText As String = "test"
        Dim oNumber As Decimal = 10.5
        Dim sSQL As String
        sSQL = "Insert Into Table1 ([oDate],[oText], [oNumber]) Select '" & oDate & "' as Expr1, '" & oText & "' as Expr2, " & oNumber & " as Expr3"
        Call oAppend(sSQL)
        Dim oSQL_Check As String = "Select Count(*) As MyCount From Table1 Where [oDate] = '" & oDate & "' And [oText] = '" & oText & "' And [oNumber] = " & oNumber
        If IsThere(oSQL_Check) = False Then
            MsgBox("not")
        End If
    End Sub



    Sub oAppend(ByVal sSQL As String)

        Dim cn As New OleDbConnection(ConnectionString)

        Try

            '// define the sql statement to execute
            Dim cmd As New OleDbCommand(sSQL, cn)

            '    '// open the connection
            cn.Open()

            cmd.ExecuteNonQuery()


        Catch ex As Exception
            MsgBox(ex.Message)

        Finally
            If cn.State <> ConnectionState.Closed Then
                cn.Close()
            End If
        End Try


    End Sub

    Function IsThere(ByVal sSQL_Check As String) As Boolean

        Dim conn As New OleDbConnection(ConnectionString)
        Try

            '// define the sql statement to execute
            Dim cmd As New OleDbCommand(sSQL_Check, conn)

            '    '// open the connection
            conn.Open()
            '################
            Dim oCount As Integer = CInt(cmd.ExecuteScalar())

            If oCount > 0 Then
                IsThere = True
            Else
                IsThere = False
            End If

        Catch ex As Exception
            MsgBox(ex.Message)

        Finally
            If conn.State <> ConnectionState.Closed Then
                conn.Close()
            End If
        End Try
    End Function

Open in new window

0
Comment
Question by:murbro
9 Comments
 
LVL 17

Assisted Solution

by:Shanmuga Sundaram
Shanmuga Sundaram earned 166 total points
ID: 36528760
did you manually check what this returns in Enterprise maanger

"Select Count(*) As MyCount From Table1 Where [oDate] = '" & oDate & "' And [oText] = '" & oText & "' And [oNumber] = " & oNumber
0
 

Author Comment

by:murbro
ID: 36528803
I'm not sure what you mean. I looked at the table data and was there
0
 
LVL 39

Accepted Solution

by:
Pratima Pharande earned 167 total points
ID: 36528865
Call oAppend(sSQL)
        Dim oSQL_Check As String = "Select Count(*) As MyCount From Table1 Where [oDate] = '" & oDate & "' And [oText] = '" & oText & "' And [oNumber] = " & oNumber
MsgBox(oSQL_Check)
        If IsThere(oSQL_Check) = False Then
            MsgBox("not")
        End If


see the query in MsgBox(oSQL_Check)
and run directly on dtabase ? what it results ?
0
Efficient way to get backups off site to Azure

This user guide provides instructions on how to deploy and configure both a StoneFly Scale Out NAS Enterprise Cloud Drive virtual machine and Veeam Cloud Connect in the Microsoft Azure Cloud.

 
LVL 75

Expert Comment

by:Anthony Perkins
ID: 36529006
Would you be open to doing this a better way?
0
 
LVL 17

Expert Comment

by:Shanmuga Sundaram
ID: 36529080
I asked whether it is possible for you to get that query during runtime (in debug mode) and execute it in sql enterprise manager and ensure that the query is correct.
0
 
LVL 2

Expert Comment

by:junkymail1
ID: 36529339
I attached some code that I use for vb.net to access the db stuff you need.  If you use the SqlDataReader class to get your data, you can find what you are looking for.
Dim SQLConn As New SqlConnection() 'The SQL Connection
        Dim SQLCmd As New SqlCommand() 'The SQL Command
        Dim reader As SqlDataReader

        Dim RegistryClass As Registry_Class = New Registry_Class()
        Dim ConnString As String = RegistryClass.GetSQLConnectString()

        Try
            SQLConn.ConnectionString = ConnString 'Set the Connection String
            SQLConn.Open() 'Open the connection
            SQLCmd.Connection = SQLConn 'Sets the Connection to use with the SQL Command

            Dim SQLStr As String = "SELECT * FROM dbo.Table_ID"

            SQLCmd.CommandText = SQLStr 'Sets the SQL String
            reader = SQLCmd.ExecuteReader()

            'Get what you need here
            Dim FieldCount As Integer = reader.FieldCount ' Gets the number of columns in the current row.
            Dim HasRows As Boolean = reader.HasRows ' Gets a value that indicates whether the SqlDataReader contains one or more rows.
            Dim RecordsAffected As Integer = reader.RecordsAffected ' Gets the number of rows changed, inserted, or deleted by execution of the Transact-SQL statement.
            Dim VisibleFieldCount As Integer = reader.VisibleFieldCount ' Gets the number of fields in the SqlDataReader that are not hidden.

            ' You can iterate through the results here.
            While reader.Read()
                Dim listitem As ListViewItem = ListView1.Items.Add(reader(0))
                listitem.SubItems.Add(reader("Product_Name"))
            End While
        Catch ex As Exception
            MsgBox("RecipeSelector_Load() Error:" + ex.Message)
        End Try

        SQLConn.Close() 'Close the connection
        SQLConn.Dispose()
        SQLConn = Nothing
        SQLCmd.Dispose()
        SQLCmd = Nothing

Open in new window

0
 
LVL 40

Assisted Solution

by:Jacques Bourgeois (James Burger)
Jacques Bourgeois (James Burger) earned 167 total points
ID: 36529397
You are handling oDate as text. There is probably a difference in the format sent by your application and the one expected by the server.

Date.Now.ToString won't give the same format on all computers, because it it dependant on the Control Panel. Your server or database on its side is expecting a date format that migth be different. In SQL Server, it is month-day-year by default, but this could have been changed by the DBA.

Try never to manipulate a date as String in your code. Date.ToString should be reserved for display.

There are many ways to deal with dates, here is a common one that formats the date as month-day-year:
String.Format("{0:MM-dd-yyyy}", Date.Today)

Open in new window

Simply adjust the format to what is expected by your server.

And note that I used Date.Today instead of Date.Now. Your code and comments seem to imply that you are calling Now but treat only the date. Now is a very bad thing then, because it also sets the time. This can cause problems later in searchs and date manipulations if you do not care about the time. Reserve Now for when you really need the time.
0
 

Author Closing Comment

by:murbro
ID: 36529633
thank you for the help
0
 

Author Comment

by:murbro
ID: 36534397
Hi acperkins. Yes I would like to find a better way. I have posted a further question relating to this at
http://www.experts-exchange.com/Microsoft/Development/MS-SQL-Server/SQL_Server_2008/Q_27307018.html
0

Featured Post

What is SQL Server and how does it work?

The purpose of this paper is to provide you background on SQL Server. It’s your self-study guide for learning fundamentals. It includes both the history of SQL and its technical basics. Concepts and definitions will form the solid foundation of your future DBA expertise.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

If you have heard of RFC822 date formats, they can be quite a challenge in SQL Server. RFC822 is an Internet standard format for email message headers, including all dates within those headers. The RFC822 protocols are available in detail at:   ht…
This article explains how to reset the password of the sa account on a Microsoft SQL Server.  The steps in this article work in SQL 2005, 2008, 2008 R2, 2012, 2014 and 2016.
This video shows how to use Hyena, from SystemTools Software, to bulk import 100 user accounts from an external text file. View in 1080p for best video quality.
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…

806 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question