sql >> データベース >  >> RDS >> Mysql

画像をC#にロードしてから、MySQLテーブルに挿入します

    私は2つの解決策を提供します。最初の解決策は、生の画像をバイト単位でデータベースに直接保存することです。 2番目の解決策は、私が個人的に推奨する方法です。代わりに、データベース内の画像ファイルのパスを使用することです。

    ここに、記事 からの抜粋があります。 これは、BLOBを使用するかどうかについていくつかの優れた点を示しています。

    画像ファイルの選択方法は次のとおりです。

    using (var openFileDialog = new OpenFileDialog())
    {
       openFileDialog.Title = "Choose Image File";
       openFileDialog.InitialDirectory =
                    Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
       openFileDialog.Filter = "Image Files (*.bmp, *.jpg)|*.bmp;*.jpg";
       openFileDialog.Multiselect = false;
       if (openFileDialog.ShowDialog() == DialogResult.OK)
       {
           pictureBox1.Image = new Bitmap(openFileDialog.FileName);
       }
       // store file path in some field or textbox...
       textBox1.Text = openFileDialog.FileName;
    }
    

    ソリューション1:BLOBアプローチ

    // Write to database like this - image is LONGBLOB type
    string sql = "INSERT INTO imagetable (image) VALUES (@file)";
    // remember 'using' statements to efficiently release unmanaged resources
    using (var conn = new MySqlConnection(cs))
    {
        conn.Open();
        using (var cmd = new MySqlCommand(sql, conn))
        {
            // parameterize query to safeguard against sql injection attacks, etc. 
            cmd.Parameters.AddWithValue("@file", File.ReadAllBytes(textBox1.Text));
            cmd.ExecuteNonQuery();
        }
    }
    
    // read image from database like this
    string sql = "SELECT image FROM imagetable WHERE ID = @ID";
    using (var conn = new MySqlConnection(cs))
    {
       conn.Open();
       using (var cmd = new MySqlCommand(sql, conn))
       {
          cmd.Parameters.AddWithValue("@ID", myInt);
          byte[] bytes = (byte[])cmd.ExecuteScalar();   
          using (var byteStream = new MemoryStream(bytes))
          {
             pictureBox1.Image = new Bitmap(byteStream);
          }
       }
    }
    

    解決策2:ファイルのパスをファイルシステムに保存する

    // Some file movement to the desired project folder
    string fileName = Path.GetFileName(this.textBox1.Text);
    string projectFilePath = Path.Combine(projectDir, fileName);
    File.Copy(this.textBox1.Text, projectFilePath);
    
    // Write to database like this - imagepath is VARCHAR type
    string sql = "INSERT INTO imagepathtable (imagepath) VALUES (@filepath)";
    using (var conn = new MySqlConnection(cs))
    {
        conn.Open();
        using (var cmd = new MySqlCommand(sql, conn))
        {
            cmd.Parameters.AddWithValue("@filepath", projectFilePath);
            cmd.ExecuteNonQuery();
        }
    }
    
    // read from database like this
    string sql = "SELECT imagepath FROM imagepathtable WHERE ID = @ID";
    using (var conn = new MySqlConnection(cs))
    {
        conn.Open();
        using (var cmd = new MySqlCommand(sql, conn))
        {
            cmd.Parameters.AddWithValue("@ID", myInt);
            pictureBox1.Image = new Bitmap(cmd.ExecuteScalar().ToString());
        }
    }
    



    1. MySQLの頻度から十分位数を計算する

    2. SQLServerの日時とタイムスタンプの違いは?

    3. SQL ServerのDIFFERENCE()関数のしくみ

    4. MySQLの動的クエリ