3

いろいろ検索していろいろ試してみましたが、この問題を解決できませんでした。イメージをmysqlファイルに保存する必要があります。

以下のコードを使用して、画像をデータベースに保存しました。

try
{
    string location = @"C:\Users\test\Downloads\Photos\batman-greenscreen.jpg";

    FileStream fs = new FileStream(location, FileMode.Open, FileAccess.Read);
    UInt32 fileLength = (UInt32)fs.Length;
    byte[] buffer = new byte[fileLength];
    fs.Read(buffer, 0, (int)fileLength);

    string sqlPhotoQuery = "INSERT INTO tab_photo VALUES('" + photo.PhotoId + "','" + photo.ProjectID + "','" + photo.Day + "','" + photo.Barcode + "','" + photo.Photoname + "','" + photo.PhotoXml + "','" + buffer + "','" + fileLength + "')";
    int result = MySqlHelper.ExecuteNonQuery(connectionString, sqlPhotoQuery);
    if (result > 0)
        return true;
    else
        return false;
}
catch (Exception e)
{
    return false;
}   

このファイルのイメージの長さは 12428 です。 値を保存する

データベースからデータを取得するために試したこと:

Photo photo = new Photo();
try
{
    string sqlQuery = "SELECT * FROM tab_photo where PhotoId='"+photoId+"'";
    MySqlDataReader rdr = MySqlHelper.ExecuteReader(connectionString, sqlQuery);
    while (rdr.Read())
    {
        photo.PhotoId = rdr.GetString("PhotoId");
        photo.ProjectID = rdr.GetString("ProjectID");
        photo.Day = rdr.GetInt32("Day");
        photo.Barcode = rdr.GetString("Barcode");
        photo.Photoname = rdr.GetString("Photoname");
        photo.PhotoXml = rdr.GetString("PhotoXml");

        MemoryStream ms;
        UInt32 FileSize;
        Bitmap outImage;

        int fileSize = rdr.GetInt32(rdr.GetOrdinal("PhotoSize"));
        byte[] rawData = new byte[fileSize];
        rdr.GetBytes(rdr.GetOrdinal("Photo"), 0, rawData, 0, (Int32)fileSize);

        photo.imageByte = rawData;

    }
}
catch (Exception e)
{}

しかし、ファイルを取得すると、最初の 13 バイトのみが取得されます。その後、その値はゼロになり、値の取得に違いがあります。

値を取得する

Connector/Net を使用した BLOB データの処理に記載されている手順に従いました。

それによると、次のように設定を変更しました。 MySql ワークベンチの設定

これは、データベースに保存されたデータの方法です DBのデータ

正しい値を取得できない理由は何ですか? データの保存や検索、データベースの構成に問題はありませんか?

4

3 に答える 3