发送多个图片文件到MySQL [英] Sending multiple image files to mySQL

查看:143
本文介绍了发送多个图片文件到MySQL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我如何发送多个JPG文件,字节数组,给我的MySQL数据库的C#?



我已阅读并理解如何将图像转换为字节数组,但我只能想出如何使用该方法对单个图像MySQL作为一个blob。我的申请要求用户上载的至少2的图像文件,并允许高达10个,在发送来自多个textBox中的信息。我试图创建一个字节数组的数组,但没有奏效。当我在INSERT字符串为MySQL中引用该阵列在一个特定的指数,它似乎只存储字节数组,引用该字节数组的索引,而不是一个应该被存储在索引整个字节数组。下面是一些代码,显示我的尝试:

  ///上传图像并将其转换为一个字节数组
私人无效uploadButtonClick(对象发件人,RoutedEventArgs E)
{
chosenFileTextBox.Text =没有文件选择;
尝试
{
的FileStream FS =新的FileStream(imageFileNameArray [I],FileMode.Open,
FileAccess.Read);
BinaryReader BR =新BinaryReader(FS);
imageFileArray = br.ReadBytes((INT)fs.Length);
///字节数组的数组
imageArray [I] = imageFileArray;
uploadedFilesTextBox.Text + = imageFileSafeNameArray [I]的ToString()+\\\



创造插入字符串的尝试如下。字符串工作时,我只发送一个字节数组,所以我改变了代码,尝试2字节数组的下方,没有运气:

  //打开连接
如果(this.OpenConnection()==真)
{
// create命令并指定从构造
试$ b $查询和连接b {
的MySqlCommand CMD =新的MySqlCommand(查询,连接);
cmd.Parameters.Add(_日期?,MySqlDbType.VarChar).value的= dateString;
cmd.Parameters.Add(,MySqlDbType.Text性?)。价值= sexString;
cmd.Parameters.Add(名字?,MySqlDbType.Text).value的=
firstNameString;
cmd.Parameters.Add(名字?,MySqlDbType.Text).value的=
lastNameString;
cmd.Parameters.Add(,MySqlDbType.VarChar艺名?)。价值=
stageNameString;
cmd.Parameters.Add(,MySqlDbType.Text年龄?)。价值= ageString;
cmd.Parameters.Add(高?,MySqlDbType.VarChar).value的= heightString;
cmd.Parameters.Add(,MySqlDbType.Text重?)。价值= weightString;
cmd.Parameters.Add(胸?,MySqlDbType.Text).value的= chestString;
cmd.Parameters.Add(,MySqlDbType.Text腰?)。价值= waistString;
cmd.Parameters.Add(臀部?,MySqlDbType.Text).value的= hipsString;
cmd.Parameters.Add(衣服?MySqlDbType.Text).value的= dressString;
cmd.Parameters.Add(,MySqlDbType.Text衬衫?)。价值= shirtString;
cmd.Parameters.Add(,MySqlDbType.VarChar裤子?)。价值= pantsString;
cmd.Parameters.Add(鞋?,MySqlDbType.VarChar).value的=鞋带;
cmd.Parameters.Add(,MySqlDbType.VarChar电子邮件?)。价值=都是EmailString;
cmd.Parameters.Add(手机?,MySqlDbType.VarChar).value的= phoneString;
cmd.Parameters.Add(,MySqlDbType.Text城市?)。价值= cityString;
cmd.Parameters.Add(_国家?,MySqlDbType.Text).value的= stateString;
cmd.Parameters.Add(经验?,MySqlDbType.VarChar).value的=
experienceString;
///?Image1的Image1的代表列。有10列,但对
///此例中只有2
cmd.Parameters.Add(?Image1的MySqlDbType.Blob)。价值=
imageArray.GetValue (0);
cmd.Parameters.Add(?IMAGE2MySqlDbType.Blob)。价值=
imageArray.GetValue(1);

//执行命令
cmd.ExecuteNonQuery();

//关闭连接
this.CloseConnection();
MessageBox.Show(连接关闭);
}


解决方案

您可能想看看你的数据库结构。在这种情况下,你可能需要多个image列,或最好,提取图像转换成一个单独的表,使每个用户可以有N个图像。



变化可能包括增加一个图片表,这些列:



INT FK_UserID结果
团块图像结果
INT将ImageType



FK_UserID设置为用户ID,而你可以有一个将ImageType列,让你可以有,例如,将ImageType 1的个人资料照片,等结果
然后,你可以做一个单独的插入此表上,一旦你已经存储你的用户,并知道他的ID。


How do I send multiple jpg files, as byte arrays, to my mySQL database with C#?

I have read and understand how to convert image files to byte arrays, but I can only figure out how to use that method for a single image to mySQL as a blob. My application requires the user to upload at least 2 image files and allows up to 10, while sending information from multiple textBox. I tried creating an array of byte arrays, but that didn't work. When I'd reference that array at a specific index during the INSERT string for mySQL, it seemed to store only one byte array and reference that byte array's index rather than the entire byte array that is supposed to be stored in that index. Below is some of the code showing my attempts:

 ///uploading the image and converting it to a byte array
 private void uploadButtonClick(object sender, RoutedEventArgs e)
    {
        chosenFileTextBox.Text = "No file chosen";
        try
        {
            FileStream fs = new FileStream(imageFileNameArray[i], FileMode.Open,                         
                 FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);
            imageFileArray = br.ReadBytes((int)fs.Length);
            ///Array of byte arrays
            imageArray[i] = imageFileArray;
            uploadedFilesTextBox.Text += imageFileSafeNameArray[i].ToString() + "\n";

The attempt at creating the insert string is below. The string worked when I sent only one byte array, so I changed the code to attempt 2 byte array's below, with no luck:

 //open connection
        if (this.OpenConnection() == true)
        {
            //create command and assign the query and connection from the constructor
            try
            {
                MySqlCommand cmd = new MySqlCommand(query, connection);
                cmd.Parameters.Add("?_Date", MySqlDbType.VarChar).Value = dateString;
                cmd.Parameters.Add("?Sex", MySqlDbType.Text).Value = sexString;
                cmd.Parameters.Add("?FirstName", MySqlDbType.Text).Value = 
                     firstNameString;
                cmd.Parameters.Add("?LastName", MySqlDbType.Text).Value =
                     lastNameString;
                cmd.Parameters.Add("?StageName", MySqlDbType.VarChar).Value = 
                     stageNameString;
                cmd.Parameters.Add("?Age", MySqlDbType.Text).Value = ageString;
                cmd.Parameters.Add("?Height", MySqlDbType.VarChar).Value = heightString;
                cmd.Parameters.Add("?weight", MySqlDbType.Text).Value = weightString;
                cmd.Parameters.Add("?Chest", MySqlDbType.Text).Value = chestString;
                cmd.Parameters.Add("?Waist", MySqlDbType.Text).Value = waistString;
                cmd.Parameters.Add("?Hips", MySqlDbType.Text).Value = hipsString;
                cmd.Parameters.Add("?Dress", MySqlDbType.Text).Value = dressString;
                cmd.Parameters.Add("?Shirt", MySqlDbType.Text).Value = shirtString;
                cmd.Parameters.Add("?Pants", MySqlDbType.VarChar).Value = pantsString;
                cmd.Parameters.Add("?Shoe", MySqlDbType.VarChar).Value = shoeString;
                cmd.Parameters.Add("?Email", MySqlDbType.VarChar).Value = emailString;
                cmd.Parameters.Add("?Phone", MySqlDbType.VarChar).Value = phoneString;
                cmd.Parameters.Add("?City", MySqlDbType.Text).Value = cityString;
                cmd.Parameters.Add("?_State", MySqlDbType.Text).Value = stateString;
                cmd.Parameters.Add("?Experience", MySqlDbType.VarChar).Value = 
                     experienceString;
                ///"?Image1" represents Image1 column.  There are 10 columns, but for
                /// this example there are only 2.
                cmd.Parameters.Add("?Image1", MySqlDbType.Blob).Value = 
                     imageArray.GetValue(0);
                cmd.Parameters.Add("?Image2", MySqlDbType.Blob).Value = 
                     imageArray.GetValue(1);

                //Execute command
                cmd.ExecuteNonQuery();

                //close connection
                this.CloseConnection();
                MessageBox.Show("Connection Closed");
            }

解决方案

You might want to look at your database structure. In this instance you probably want multiple image columns, or preferably, extract the images into a separate table so that each 'User' can have N images.

Changes might include adding an Images table with these columns:

int FK_UserID
blob Image
int ImageType

The FK_UserID is set to the userId, and you can have an ImageType column so that you can have, for example, ImageType of 1 for profile photo, etc.
Then you can do a separate insert on this table once you have stored your user and know his ID.

这篇关于发送多个图片文件到MySQL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆