Click here to Skip to main content
15,896,154 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hello,

can you help me how can I select multiple columns from table? I dont known where I have a error, because app dont show me error.

thank you

What I have tried:

provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source ="
        dataFile = "sdf.accdb" ' Change it to your Access Database location
        connString = provider & dataFile
        myConnection.ConnectionString = connString

Try
            myConnection.Open()
            Dim str As String
            str = "SELECT TYP_STROJE, Strana, NAZEV_PROJEKTU, CIS_PRAC, NAZ_PRAC FROM IDSTROJE WHERE EVID_CIS_STROJE= '" & Serial_no & "'"
            Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)

            'cmd.Parameters.Add(New OleDbParameter("EVID_CIS_STROJE", CType(Serial_no, String)))
            cmd.Parameters.Add(New OleDbParameter("TYP_STROJE", CType(Typ_stroj, String)))
            cmd.Parameters.Add(New OleDbParameter("Strana", CType(strana, String)))
            cmd.Parameters.Add(New OleDbParameter("NAZEV_PROJEKTU", CType(nazev_proj, String)))
            cmd.Parameters.Add(New OleDbParameter("CIS_PRAC", CType(Cislo_prac, String)))
            cmd.Parameters.Add(New OleDbParameter("NAZ_PRAC", CType(Nazev_prac, String)))
            'cmd.Parameters.Add(New OleDbParameter("NAZEV_STROJE", CType(Nazev_stroj, String)))


            cmd.ExecuteNonQuery()
            cmd.Dispose()

            myConnection.Close()
            myConnection.Dispose()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub
Posted
Updated 22-Jan-19 0:20am

There are quite a few things wrong here.
But before we start, some basics: Compiling does not mean your code is right! :laugh:
Think of the development process as writing an email: compiling successfully means that you wrote the email in the right language - English, rather than German for example - not that the email contained the message you wanted to send.

So now you enter the second stage of development (in reality it's the fourth or fifth, but you'll come to the earlier stages later): Testing and Debugging.

Start by looking at what it does do, and how that differs from what you wanted. This is important, because it give you information as to why it's doing it. For example, if a program is intended to let the user enter a number and it doubles it and prints the answer, then if the input / output was like this:
Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Then it's fairly obvious that the problem is with the bit which doubles it - it's not adding itself to itself, or multiplying it by 2, it's multiplying it by itself and returning the square of the input.
So with that, you can look at the code and it's obvious that it's somewhere here:
VB
Private Function Double(ByVal value As Integer) As Integer
    Return value * value
End Function

Once you have an idea what might be going wrong, start using the debugger to find out why. Put a breakpoint on the first line of the method, and run your app. When it reaches the breakpoint, the debugger will stop, and hand control over to you. You can now run your code line-by-line (called "single stepping") and look at (or even change) variable contents as necessary (heck, you can even change the code and try again if you need to).
Think about what each line in the code should do before you execute it, and compare that to what it actually did when you use the "Step over" button to execute each line in turn. Did it do what you expect? If so, move on to the next line.
If not, why not? How does it differ?
Hopefully, that should help you locate which part of that code has a problem, and what the problem is.
This is a skill, and it's one which is well worth developing as it helps you in the real world as well as in development. And like all skills, it only improves by use!

Now, let's talk about specific problems with your code, and we'll start with the most important, which is one you haven't noticed yet: 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:
SQL
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:
SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Which SQL sees as three separate commands:
SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';
A perfectly valid SELECT
SQL
DROP TABLE MyTable;
A perfectly valid "delete the table" command
SQL
--'
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? Fix this throughout your whole app as a matter of urgency: if you miss one, you will have problems in the future.

I know you can use parameters, because your code shows some ... but they are just pasted in from somewhere else, because your command doesn't use them! It passes the serial number as a parameter - or would if you hadn't commented that out - so use that instead of the concatenation, and dump the rest...

Then there is the actual DB access ... why are you executing a non-query for a SELECT? SELECT is a query, it is intended to return data - and ExecuteNonQuery specifically says "this returns no data" which means you have no way to access the data you SELECTed! Use a DataAdapter or a DataReader instead:
VB
Using con As New SqlConnection(strConnect)
	con.Open()
	Using cmd As New SqlCommand("SELECT iD, description FROM myTable", con)
		Using reader As SqlDataReader = cmd.ExecuteReader()
			While reader.Read()
				Dim iD As Integer = CInt(reader("iD"))
				Dim desc As String = DirectCast(reader("description"), String)
				Console.WriteLine("ID: {0}" & vbLf & "    {1}", iD, desc)
			End While
		End Using
	End Using
End Using
 
Share this answer
 
Comments
Member 13711215 22-Jan-19 6:20am    
Thank you
OriginalGriff 22-Jan-19 6:29am    
You're welcome!
provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source ="
        dataFile = "sdf.accdb" ' Change it to your Access Database location
        connString = provider & dataFile
        myConnection.ConnectionString = connString

        myConnection.Open()
        Dim str As String
        str = "SELECT TYP_STROJE, Strana, NAZEV_PROJEKTU, CIS_PRAC, NAZ_PRAC " & "FROM [IDSTROJE] " & "WHERE EVID_CIS_STROJE= '" & Serial_no & "'"
        Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)

        Using reader As OleDbDataReader = cmd.ExecuteReader()

            If reader.HasRows Then
                reader.Read()
            End If
            Try
                Dim iD As String = reader("TYP_STROJE") IsNot DBNull.Value = False
                If iD = False Then
                    iD = reader("TYP_STROJE")
                    Assy_rozcestnik_porucha.nazev_stroj.Text = iD
                Else
                End If
            Catch EX As Exception
                MsgBox("Informace o záznamu nebyly nalezeny")
                Assy_rozcestnik_porucha.RichTextBox2.Clear()
                Assy_rozcestnik_porucha.RichTextBox2.Select()
            End Try
 
Share this answer
 
Comments
Richard Deeming 22-Jan-19 7:55am    
That's still vulnerable to SQL Injection[^].

Const str As String = "SELECT TYP_STROJE, Strana, NAZEV_PROJEKTU, CIS_PRAC, NAZ_PRAC FROM [IDSTROJE] WHERE EVID_CIS_STROJE = ?"
Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
cmd.Parameters.AddWithValue("1", Serial_no)

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900