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

画像をデータベースに保存して取得する

    コードにいくつかの問題があります。行ごとに説明します:

    MemoryStream ms =new MemoryStream();
    byte[] PhotoByte=null;
    PhotoByte=ms.ToArray();
    pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
    PhotoByte =ms.ToArray();
    

    問題はありませんが、ここには不要な割り当てがあります。上記のコードは、次のようにより明確に記述できます:

    MemoryStream ms =new MemoryStream();
    pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
    byte[] PhotoByte =ms.ToArray();
    

    次に、次のコードはパラメーターを使用していません。 SQL を動的に構築するのではなく、常に、常に、常に SQL クエリをパラメータ化します。いいえ、真剣に、常に。はい、それでもです。 (また、Str とは 変数?ある種の再利用されたインスタンス変数?そうしないでください。)

    Str = "insert into Experimmm Values('" + PhotoByte + "','" + textBox1.Text + "')";
    Conn.Open();
    cmd.Connection = Conn;
    cmd.CommandText = Str;
    cmd.ExecuteNonQuery();
    Conn.Close();
    

    代わりに、次のようにする必要があります:

    Conn.Open();
    using(SqlCommand cmd = connection.CreateCommand())
    {
        cmd.CommandText = "insert into Experimmm (column list) values(@data, @name)";
    
        cmd.Parameters.Add("@data", SqlDbType.VarBinary).Value = PhotoByte;
        cmd.Parameters.Add("@name", SqlDbType.VarChar, yourlength).Value = textBox1.Text;
    
        cmd.ExecuteNonQuery();
    }
    Conn.Close();
    

    次に、取得に移ります。再び Str で 変数、この種のことをしないでください。また、このクエリもパラメータ化する必要があります。

    byte[] data;
    string name;
    
    Conn.Open();
    using(SqlCommand cmd = Conn.CreateCommand())
    {    
        cmd.CommandText = "select column_list from Experimmm where id = @id";
    
        cmd.Parameters.Add("@id", SqlDbType.VarChar, field_length).Value = textBox2.Text;
    
        using(SqlDataReader dr = cmd.ExecuteReader())
        {
            if (dr.Read())
            {
                data = (byte[])dr.GetValue(0); 
                name = (string)dr.GetValue(1);
            }
        }
    }
    Conn.Close();
    
    label1.Text = name;
    pictureBox2.Image = Image.FromStream(new MemoryStream(data));
    


    1. JDBCステートメントとプリペアドステートメントの違い

    2. SQLストアドプロシージャの実行時間の違い

    3. MySQLで動的に管理されているテーブルを削除する

    4. PHPフォームがmySQLデータベースに挿入されない