C#: как загрузить изображение в SQL серверную базу данных, используя varbinary (Max) - PullRequest
0 голосов
/ 06 апреля 2020

Я пытался загрузить изображения в свою базу данных, но я получаю эту ошибку:

Неявное преобразование из типа данных varchar в varbinary (max) не допускается. Используйте функцию CONVERT для выполнения этого запроса

Вот мой код:

con.Open();

cmd = new SqlCommand("SELECT * FROM ImagePosts", con);
ad = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
ad.Fill(ds);

int id = ds.Tables[0].Rows.Count + 1;

byte[] buffer = File.ReadAllBytes(file);

SqlCommand cmd2 = new SqlCommand("INSERT INTO Images (Id, Title, Image) VALUES('" + id + "', '" + textBox1.Text + "', '" + "@image" + "')", con);

var binary1 = cmd2.Parameters.Add("@image", SqlDbType.VarBinary, -1);
binary1.Value = buffer;

cmd2.ExecuteNonQuery();
con.Close();
this.Close();

Редактировать: мой плохой, я забыл удалить скобки вокруг @ image.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Проблема в том, что вы вставляете '@image', когда оно должно быть просто @image. Если вы поставите '', это означает, что вы хотите вставить значение "@image" в поле. Бросьте '', и это должно сработать. Однако я бы также порекомендовал сделать то же самое для Textbox.Text, иначе вы можете получить Sql Injected:

           con.Open();
        cmd = new SqlCommand("SELECT * FROM ImagePosts", con);
        ad = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        ad.Fill(ds);
        int id = ds.Tables[0].Rows.Count + 1;


        byte[] buffer = File.ReadAllBytes(file);
        SqlCommand cmd2 = new SqlCommand("INSERT INTO Images (Id, Title, Image) VALUES('" + id + "', @Title, @image)", con);
        cmd2.Parameters.Add("@Title", textBox1.Text);
        var binary1 = cmd2.Parameters.Add("@image", SqlDbType.VarBinary, -1);
        binary1.Value = buffer;
        cmd2.ExecuteNonQuery();
        con.Close();
        this.Close();

Вы можете даже сделать это с идентификатором.

0 голосов
/ 06 апреля 2020

Вам не нужно оборачивать данные varbinary в одинарные кавычки на сервере sql. Попробуйте это

SqlCommand cmd2 = new SqlCommand("INSERT INTO Images (Id, Title, Image) VALUES('" + id + "', '" + textBox1.Text + "',  @image)", con);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...