【发布时间】:2014-04-06 08:13:29
【问题描述】:
如何使用 C# 将多个 jpg 文件作为字节数组发送到我的 mySQL 数据库?
我已阅读并了解如何将图像文件转换为字节数组,但我只能弄清楚如何使用该方法将单个图像作为 blob 转换为 mySQL。我的应用程序要求用户上传至少 2 个图像文件,最多允许 10 个,同时从多个文本框发送信息。我尝试创建一个字节数组的数组,但这不起作用。当我在 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");
}
【问题讨论】:
-
我没有 mysql 来测试这个理论,但是你有没有尝试将 imageArray[0] 直接分配给 "?Image1" 参数?
-
cmd.Parameters.Add("?Image1", MySqlDbType.Blob).Value = (byte[])imageArray.GetValue(0);帮助?您也可以尝试cmd.Parameters.Add("?Image1", MySqlDbType.Blob, ((byte[])imageArray.GetValue(0)).Length).Value = (byte[])imageArray.GetValue(0);,如果可行,请清理代码。最后,确保您的图像大小不大于 65535,否则您将不得不使用LongBlob之类的东西。
标签: c# mysql wpf bytearray jpeg