Click here to Skip to main content
15,887,596 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
C#
protected void Upload(object sender, EventArgs e)
    {
        //Extract Image File Name.
        string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName);

        //Set the Image File Path.
        string filePath = "~/Uploads/" + fileName;

        //Save the Image File in Folder.
        FileUpload1.PostedFile.SaveAs(Server.MapPath(filePath));
        string mycon = "server =localhost; Uid=root; password = ; persistsecurityinfo = True; database =ovs; SslMode = none";

        MySqlConnection con1 = new MySqlConnection(mycon);
      //  string sql = "INSERT INTO candidate VALUES(@Name, @Path)";
        MySqlCommand cmd = null;
        cmd = new MySqlCommand("INSERT INTO candidate(candidateImage,path where studentID ='" + Session["UserName"] + "') VALUES (@Name,@Path)", con1);

                cmd.Parameters.AddWithValue("@Name", fileName);
                cmd.Parameters.AddWithValue("@Path", filePath);
        con1.Open();
        cmd.ExecuteNonQuery();
        con1.Close();
    }


What I have tried:


When the users click the upload button, the image and path will be saved to the database that belongs to the specific users. For example, the users with ID R1001 login into their account, and when they click the upload button, the picture and path will be saved under the R1001 in the database. I show the error message which suggests there is a syntax error, but I not able to find it. The sample column will be like 
StudentID              Name    Path
R1001
After users click submit, the name and path will be added

Posted
Updated 17-Oct-20 22:12pm
Comments
Richard MacCutchan 18-Oct-20 4:02am    
I think you should be using the UPDATE command, not INSERT.
ycwong99 18-Oct-20 4:07am    
I changed the command with cmd = new MySqlCommand("UPDATE SET candidate(candidateImage,path where studentID ='" + Session["UserName"] + "') VALUES (@Name,@Path)", con1); I show the syntax error
Richard MacCutchan 18-Oct-20 4:27am    
You have SET in the wrong position; see MySQL :: MySQL 8.0 Reference Manual :: 13.2.13 UPDATE Statement[^].

1 solution

Your INSERT syntax is wrong:
cmd = new MySqlCommand("INSERT INTO candidate(candidateImage,path where studentID ='" + Session["UserName"] + "') VALUES (@Name,@Path)", con1);

INSERT never has a WHERE clause - it can't because it doesn't return any rows, or affect any existing rows. Even if it did - which it doesn't - the WHERE clause is always at the end, not mashed into the middle of the values!
You would have to pass the StudentID as a column to be INSERTed along with the other data.

In addition: 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?
 
Share this answer
 

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