将多个图像文件发送到mySQL

时间:2014-03-04 16:49:01

标签: c# mysql wpf bytearray jpeg

如何使用C#将多个jpg文件(如字节数组)发送到mySQL数据库?

我已阅读并了解如何将图像文件转换为字节数组,但我只能弄清楚如何将单个图像的方法用作myb作为blob。我的应用程序要求用户上传至少2个图像文件,并允许最多10个,同时从多个textBox发送信息。我尝试创建一个字节数组数组,但这不起作用。当我在mySQL的INSERT字符串期间在特定索引处引用该数组时,它似乎只存储一个字节数组并引用该字节数组的索引而不是应该存储在该索引中的整个字节数组。下面是一些显示我尝试的代码:

 ///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";

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

 //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");
            }

1 个答案:

答案 0 :(得分:2)

您可能希望查看数据库结构。在这种情况下,您可能需要多个图像列,或者最好将图像提取到一个单独的表中,以便每个“用户”可以拥有N个图像。

更改可能包括在这些列中添加Images表:

int FK_UserID
blob图像
int ImageType

FK_UserID设置为userId,您可以拥有一个ImageType列,例如,ImageType为1,可用于个人资料照片等。
然后,一旦您存储了用户并知道他的ID,就可以在此表上单独insert