Look at your query:
String QueryStr = "INSERT INTO MapDataImage VALUES Image WHERE @Source='" + TextBox1.Text + "';";
SqlCommand scmd = new SqlCommand(QueryStr);
scmd.Parameters.Add("@Image", SqlDbType.VarBinary).Value = imgbytes;
scmd.ExecuteNonQuery();
You are specifying the variable
@Source
but only providing a value for the variable
@Image
Probably, what you wanted to say was:
String QueryStr = "INSERT INTO MapDataImage VALUES (@Source, @Image)";
SqlCommand scmd = new SqlCommand(QueryStr);
scmd.Parameters.AddWithValue("@Image", imgbytes);
scmd.Parameters.AddWithValue("@Source", TextBox1.Text);
scmd.ExecuteNonQuery();
But it is a good idea to also provide the field names in your query to ensure they go in the right place...
INSERT INTO myTable (MyColumn1, MyColumn2) VALUES (@MC1, @MC2)