0

Datagrid から pictureBox に画像を表示するのに問題があります。私はsqlconnectionを使用し、sqldatareaderを使用してデータを取得しました。画像をsystembyte形式でSQLサーバーに保存しましたが、データグリッドの行をクリックしても画像を表示できません

私を助けてください

READER から DATAGRID への値のロード

 oCon.Open();
 SqlCommand get_company_histroy = new SqlCommand("sp_select_company_history", oCon);
 get_company_histroy.CommandType = CommandType.StoredProcedure;
 get_company_histroy.Parameters.Add("@Company_Code ",txtdetailcompcode.Text);

 oDr = get_company_histroy.ExecuteReader();

 ArrayList sequence = new ArrayList();
 while (oDr.Read())
 {
     Get_Histroy His = new Get_Histroy();
     His.Photo = oDr[6].ToString();
     sequence.Add(His);

     //txtcompdetailhisfounder.Text = Convert.ToString(oDr["History_Founder"]);
     //DTP_comp_details_his_since.Text=Convert.ToString (oDr["History_Since"]);
 }
 DG_Mas_Com_History.DataSource = sequence;

リーダーから値を取得するためのクラス

public class Get_Histroy
{
    public  string Photo
    {
        get { return History_Photo; }
        set { History_Photo=value; }
    }
}

データグリッドクリックイベント

private void DG_Mas_Com_History_CellClick(object sender, DataGridViewCellEventArgs e)
{
    try
    {
        if (e.RowIndex >= 0)
            get_company_histroy.Parameters.Add("@Company_Code ", txtdetailcompcode.Text);
        oDr = get_company_histroy.ExecuteReader();

        byte[] picarr = (byte[])DG_Mas_Com_History.Rows[e.RowIndex].Cells[4].Value;
        ms = new MemoryStream(picarr);
        ms.Seek(0, SeekOrigin.Begin);
        PBcompdetailhisphoto.Image = System.Drawing.Image.FromStream(ms);
    }

エラーが発生しています:

'System.String' 型のオブジェクトを 'System.Byte[]' 型にキャストできません。)

ラインから

byte[] picarr = (byte[])DG_Mas_Com_History.Rows[e.RowIndex].Cells[4].Value;
4

1 に答える 1

0

この行には問題があります:

His.Photo = oDr[6].ToString();

データベースから画像をバイト単位で取得する必要があります。こちらを参照してくださいSqlDataReaderを使用してバイナリデータを取得する

于 2012-06-15T11:59:18.197 に答える