title: Uploading files in varbinary(MAX)
body: <p>I have a database table with two field of type varbinary(max), which i use to store files. </p>
  
  <p>However, I am unable to upload the files as expected. I've been stumped for this problem for a long time and I'm not sure what I can do to resolve it. There is an error message:</p>
  
  <pre><code>An exception of type 'System.Data.SqlClient.SqlException' occurred in
  System.Data.dll but was not handled in user code
  Additional information: Incorrect syntax near the keyword 'title'.
  </code></pre>
  
  <p>Its a <strong>must</strong> for me to  implement 3-tier architecture in ASP.NET.</p>
  
  <p><strong><em>Data Access Layer</em></strong></p>
  
  <pre><code>public class Submission { 
  
    private string _title;
    private byte[] _slides, _codes;
  
    //Connection string 
    private string _connStr = Properties.Settings.Default.DBConnStr;
  
    public Submission(string title, byte[] slides, byte[] codes) {
    _title = title;
    _slides = slides;
    _codes = codes;
    }
  
    //UPLOAD files
    public int SubmissionInsert()
    {
            string queryStr = "INSERT INTO Submission(title,slides,codes)" +
                "VALUES('" +
                _title + "', '" +
                _slides + "', '" +
                _codes + "')";
  
            SqlConnection con = new SqlConnection(_connStr);
            SqlCommand cmd = new SqlCommand(queryStr, con);
  
            con.Open();
            int nofRow = 0;
            nofRow = cmd.ExecuteNonQuery();
  
            con.Close();
  
            return nofRow;
    }
  }
  </code></pre>
  
  <p><strong><em>Business Logic Layer</em></strong></p>
  
  <pre><code>public class SubmissionBLL
  {
      public string submissionUpload(string title, byte[] slides, byte[] codes)
      {
          string returnValue = "";
  
          if (title.Length == 0)
              returnValue+= "Title cannot be empty";
          if (slides == null)
              returnValue += "Slides cannot be empty";
          if (codes == null)
              returnValue += "Codes cannot be empty";
  
          //if there are no errors
          if (returnValue.Length == 0)
          {
              Submission sub = new Submission(title,slides,codes);
  
              int nofRows = 0;
              nofRows = sub.SubmissionInsert();
  
              if (nofRows &gt; 0)
                  returnValue = "Submission is successful!";
              else
                  returnValue = "Submission failure. Please try again.";
          }
  
          return returnValue;
    }
  </code></pre>
  
  <p><strong><em>Presentation Layer - Code-behind</em></strong></p>
  
  <pre><code> protected void btn_submit_Click(object sender, EventArgs e)
      {
          string input = "";
          byte[] slideArr = null, codeArr= null;
  
          string strTestFilePath, strTestFileName, strContentType;
          Int32 intFileSize, intFileLength;
          Stream strmStream;
  
          if (f_codes.HasFile)
          {
                  strTestFilePath = f_codes.PostedFile.FileName;
                  strTestFileName = Path.GetFileName(strTestFilePath);
                  intFileSize = f_codes.PostedFile.ContentLength;
                  strContentType = f_codes.PostedFile.ContentType;
  
                  //Convert the source codes file to byte stream to save to database
                  strmStream = f_codes.PostedFile.InputStream;
                  intFileLength = (Int32)strmStream.Length;
                  codeArr = new byte[intFileLength + 1];
                  strmStream.Read(codeArr, 0, intFileLength);
                  strmStream.Close();
  
          }
  
           if (f_slide.HasFile)
          {
                  strTestFilePath = f_slide.PostedFile.FileName;
                  strTestFileName = Path.GetFileName(strTestFilePath);
                  intFileSize = f_slide.PostedFile.ContentLength;
                  strContentType = f_slide.PostedFile.ContentType;
  
                  strmStream = f_slide.PostedFile.InputStream;
                  intFileLength = (Int32)strmStream.Length;
                  slideArr = new byte[intFileLength + 1];
                  strmStream.Read(slideArr, 0, intFileLength);
                  strmStream.Close();
              }
  
           //Pass to BLL
           input = sub.submissionUpload(tb_title.Text,slideArr,codeArr);
           //Display error messages
           lbl_message.Text = input;
      }
  </code></pre>
  
  <p>I tried to debug with IntelliTrace and it shows a message</p>
  
  <p>ADO.NET:Execute NonQuery "INSERT INTO Submission(title,slides,codes)VALUES( 'My Water Saving Project', 'System.Byte[]','System.Byte[]')"</p>
  
  <hr>
  
  <p>Am I doing this correctly? I tried to run and the exception error is still
      present.</p>
  
  <pre><code>string queryStr = "INSERT INTO Submission(title,slides,codes)" + "VALUES('"+
              _title + "', '" +
             "0x" + BitConverter.ToString(_slides).Replace("-", "")+ "', '" +
             "0x" + BitConverter.ToString(_codes).Replace("-", "")  + "')";
  </code></pre>