无法将参数值从Byte []转换为String

时间:2016-11-30 07:27:15

标签: c# mysql asp.net string byte

我正在用c#asp.net构建一个应用程序。我需要将一些数据插入数据库。一切正常,但插入图片时出现问题。

我的数据库表:

顺序

OrderID int
description varchar(50)
numOfItems int
material varchar(50)
image varbinary(max)

我将数据插入数据库的代码

protected void btnAddItem_Click(object sender, EventArgs e)
    {
        string filepath = fileUpload.PostedFile.FileName;
        string filename = Path.GetFileName(filepath);
        string ext = Path.GetExtension(filename);
        string contentType = String.Empty;

        switch (ext)
        {
            case ".jpg":
                contentType = "image/jpg";
                break;
            case ".png":
                contentType = "image/png";
                break;
            case ".gif":
                contentType = "image/gif";
                break;
            case ".pdf":
                contentType = "application/pdf";
                break;
        }
        if (contentType != String.Empty)
        {
            Stream fs = fileUpload.PostedFile.InputStream;
            BinaryReader br = new BinaryReader(fs);
            Byte[] bytes = br.ReadBytes((Int32)fs.Length);

            string kon = ConfigurationManager.ConnectionStrings["mk"].ConnectionString;

            using (SqlConnection conn = new SqlConnection(kon))
            {
                using (SqlCommand cmd = new SqlCommand("INSERT INTO Order(description, numOfItems, material, image"))
                {
                    cmd.Connection = conn;
                    cmd.Parameters.AddWithValue("@description", inputTextArea.Text);
                    cmd.Parameters.AddWithValue("@numOfItems", inputTextArea.Text);
                    cmd.Parameters.AddWithValue("@material", inputTextArea.Text);
                    cmd.Parameters.Add("@image", SqlDbType.VarChar).Value = bytes;
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    Response.Write("Success!");
                }
            }
        }
    }

当我这样做时,我收到以下错误:无法将参数值从字节[]转换为字符串。

有什么想法吗?

更新 - 新错误

'image'附近的语法不正确。错误。任何想法?

3 个答案:

答案 0 :(得分:2)

cmd.Parameters.Add("@image", SqlDbType.VarChar).Value = bytes;

您的图片不是VarChar类型,您需要修复它。最有可能的是,您需要Binary

答案 1 :(得分:2)

对于参数@image,传递的值是一个字节数组,但是您指定输入将VarChar将其更改为Binary。所以添加特定参数的语句将如下所示

cmd.Parameters.Add("@image", SqlDbType.Binary).Value = bytes;

您必须将占位符添加到查询中,这意味着查询文本应如下所示:

"INSERT INTO Order(description, numOfItems, material, image)values(@description, @numOfItems,@material,@image)"

答案 2 :(得分:1)

根据您的数据库列类型更改SqlDbType

在SQL中保存图像的可能数据类型是:

字符串类型:

数据类型和说明:

二进制(n)固定宽度二进制字符串。最大8,000字节

varbinary 可变宽度二进制字符串。最大8,000字节

varbinary(max)可变宽度二进制字符串。最大2GB

图片可变宽度二进制字符串。最大2GB

cmd.Parameters.Add("@image", SqlDbType.image).Value = bytes;

// Replace 8000, below, with the correct size of the field
     cmd.Parameters.Add("@image", SqlDbType.VarBinary, 8000).Value = bytes;

将SQL命令修改为:

SqlCommand("INSERT INTO Order(description, numOfItems, material, image) values (@description,@numOfItems,@material,@image)")