Откуда берется необработанное исключение SQLException, которое я получаю? - PullRequest
1 голос
/ 28 февраля 2012

У меня был этот код;

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        SqlConnection cnn;
        string connectionString;
        connectionString = "server=.\\sqlexpress;database=Blue;trusted_connection=true";
        cnn = new SqlConnection(connectionString);

        MemoryStream stream = new MemoryStream();
        cnn.Open();
        SqlCommand command = new SqlCommand("select Image from ImageParts where ImageName=" + listBox1.SelectedIndex, cnn);
        byte[] image = (byte[])command.ExecuteScalar();
        stream.Write(image, 0, image.Length);
        cnn.Close();
        Bitmap bitmap = new Bitmap(stream);
        pictureBox1.Image = bitmap;
    }

Я сохранил ImageName в listBox1.Items

Затем возникает ошибка.

Не удалось выполнить преобразование при преобразовании значения varchar 'c1.jpg' в тип данных int.

В чем может быть проблема?Поскольку я новичок в C #, я не знаком с этими ошибками.

Ответы [ 3 ]

1 голос
/ 29 февраля 2012

Я полагаю, что столбец ImageName в вашей базе данных является строковым типом, а не типом int. Вы передаете в SqlCommand индекс, а не имя изображения. И если это так, не забудьте использовать одинарные кавычки вокруг вашей строки.

string nameImg = listBox1.SelectedItem.ToString();
SqlCommand command = new SqlCommand("select Image from ImageParts where ImageName = '" + nameImg + "'");

Здесь я предполагаю, что ваш список заполнен строковыми именами ваших изображений

1 голос
/ 29 февраля 2012

Похоже, что ваше поле ImageName в вашей базе данных имеет тип данных int, и вы передаете ему string (varchar).

Проверьте и исправьте тип данныхImageName в вашей базе данных.

0 голосов
/ 29 февраля 2012

Наряду с тем, что сказал Стив, вам также следует обернуть свой код в разрыв блока try catch команды SQL и посмотреть, какое значение отправляется на сервер. Получите command.CommandText.ToString () в вашем непосредственном окне или через часы, скопируйте это значение и попробуйте запустить его в SSMS, проанализируйте его и посмотрите, что происходит, и соответствующим образом скорректируйте вашу строку. Таким образом, теперь вы можете видеть причину сбоя, а также соответственно обрабатывать ошибки в вашей программе, когда что-то не получается.

...