2016-10-04 4 views
0

У меня есть код, который я скопировал из учебника, который я смотрю, и наш код настолько похож в учебнике.Параметр C# недействителен SQL

Когда ведущий запускает код, он работает нормально, но когда я пытаюсь запустить свой код, такой же, как в учебнике, я получаю сообщение об ошибке «параметр недействителен».

Пожалуйста, помогите

private void Viewbutton_Click(object sender, EventArgs e) 
    { 
     conection.Open(); 

     string sqlQuery = "select studnum, course, f_name, l_name, color_image from table3 where studnum='" + textBox1.Text + "'"; 

     cmd = new SqlCommand(sqlQuery, conection); 

     SqlDataReader dataread = cmd.ExecuteReader(); 
     dataread.Read(); 

     if (dataread.HasRows) 
     { 
      lblstudnum.Text = dataread[0].ToString(); 
      lblcourse.Text = dataread[1].ToString(); 
      lblfname.Text = dataread[2].ToString(); 
      lbllname.Text = dataread[3].ToString(); 
      byte[] images = (byte[])dataread[4]; 

      if(images==null) 
      { 
       pictureBox1.Image = null; 
      } 
      else 
      { 
       MemoryStream mstreem = new MemoryStream(images); 
       pictureBox1.Image = Image.FromStream(mstreem); 
      } 
     } 
     else 
     { 
      MessageBox.Show("this data not available"); 
     } 
    } 

Линия ошибка является

pictureBox1.Image = Image.FromStream(mstreem); 
+6

Вы должны использовать параметризованные запросы вместо конкатенации в предложении 'WHERE'. –

+7

В каком учебном пособии предлагается использовать конкатенацию строк для создания sql-запросов? Используйте параметризованные запросы. –

+0

Я нашел этот код в этом учебнике https://www.youtube.com/watch?v=d7klnhcFBEg –

ответ

1

Лучше использовать параметрический запрос и имя столбца вместо [0], [1] и т.д .. Поток Память используемый для чтения данных. Таким образом, вы должны использовать, как показано ниже, при условии, что действительное изображение сохраняется в базе данных

var con = new SqlConnection("the connection string to database"); 
    con.Open(); 

    SqlCommand cmd = new SqlCommand(@"sql query",con); 
    byte[] images = null; 
    using (SqlDataReader dataread = cmd.ExecuteReader()) 
    { 
     if (dataread.Read()) 
     { 
      //lblstudnum.Text = dataread[0].ToString(); 
      //lblcourse.Text = dataread[1].ToString(); 
      //lblfname.Text = dataread[2].ToString(); 
      //lbllname.Text = dataread[3].ToString(); 
      images = (byte[])dataread["color_image"];// column name is recommended 
     } 
    } 
    con.Close(); 
    if (images == null) 
    { 
     pictureBox1.Image = null; 
    } 
    else 
    { 
     MemoryStream mstreem = new MemoryStream(images); 
     pictureBox1.Image = Image.FromStream(mstreem); 
    } 
+0

Я пытаюсь использовать это, и он говорит: «Свойство подключения не было инициализировано» –

+0

@andrewfaz: вы нашли решение – GauravKP

0

Возможно, это не действительное изображение. Добавьте в свою программу код отладки (или настройте watch), который выведет длину потока памяти и первые несколько байтов. Убедитесь, что длина - это то, что вы ожидали. Убедитесь, что префикс файла существует, если таковой имеется, например. растровые файлы имеют two-letter alphanumeric prefix. Удостоверьтесь, что он не уселся. Убедитесь, что это allowed file format. Проблема может заключаться в том, что в базе данных вашего инструктора есть данные, а у вас нет.

+0

да, возможно, недопустимое изображение, но я сохраняю в varbinary, но теперь я заменяю его типом данных изображения, но он все тот же ошибка –

+0

I не имел в виду тип данных, я имел в виду содержимое данных. –

+0

Возможно, в качестве меры по устранению неполадок вы можете изменить свою программу на [сохранить изображение в файл] (http://stackoverflow.com/questions/18766055/copy-memorystream-to-filestream-and-save-the-file), затем попробуйте открыть его с помощью MS Paint. Если вы не можете открыть его, у вас возникнет проблема с данными. –

Смежные вопросы