0

私のプロジェクトの1つに、私のpictureboxstupicに画像が含まれている場合にbyte []を返す次のようなメソッドがあります。pictureboxstupic に画像がない場合は string = "NULL" を返すように変換したいのですが、それ以外の場合は bute[] を返す必要があります。どうやってやるの??

private byte[] GetPic()
{
    using (var stream = new MemoryStream())
    {
        var bmp = new Bitmap(pictureboxstupic.Image);
        bmp.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
        stream.Position = 0;
        var data = new byte[stream.Length];
        stream.Read(data, 0, data.Length);
        return data;
    }
}

注:画像を挿入している列は次のとおりです

CREATE TABLE [dbo].[Students] 
([Photo] [image] NULL)

そして、私の現在の状態では、上記の列、つまりStudents.Photoのような画像に画像を挿入しています

if (pictureboxstupic.Image == null)
{
    cmd.Parameters.Add("@Photo", SqlDbType.VarChar).Value = "NULL";
}
else
{
cmd.Parameters.Add("@Photo", SqlDbType.Image).Value = GetPic();
}
4

6 に答える 6

4

常にオブジェクトを返し、期待する型にキャストすることができますが、それは良い考えではありません。メソッドを呼び出す前に、pictureboxstupic が空かどうかを確認してから、適切なロジック (たとえば、"NULL" を割り当てる) を実行するとよいでしょう。

同様のセマンティックをTryParseに適用することもできます。つまり、pictureboxstupic が空でない場合に応答する bool を返し、out パラメーターとしてバイト配列を返すことができます。

于 2012-05-06T08:03:25.887 に答える
1

代わりに戻るobjectis次に、最初にキーワードを使用して型をチェックしてベースをキャストします。

if(returnedType is string) //or use as and then check for NULL
{

}
else   //type is byte[]
{
}

ユースケースとそれが有効かどうかはわかりませんが、これは解決策になる可能性があります

于 2012-05-06T08:03:44.160 に答える
1

次の 3 つのソリューションで実現できます。

1.) オブジェクトを戻り値の型として使用する

2.) 'ref' および 'out' パラメータ指定子を使用して配列を返し、ステータス メッセージを返すメソッドの戻り値の型を文字列にします。

3.) ポインターに「安全でない」コードを使用する...

例:

    public string GetPic(out byte[] ret)
    {
        if (Image == null)
            return "NULL";
        //set ret's value as image bytes
        return "ok";
    }
于 2012-05-06T08:08:01.540 に答える
-1

私はこの方法のように私の問題を解決しました:

private object GetPic()
{
    if(pictureboxstupic.Image == null)
    {
        return null;
    }
    using (var stream = new MemoryStream())
    {
        var bmp = new Bitmap(pictureboxstupic.Image);
        bmp.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
        stream.Position = 0;
        var data = new byte[stream.Length];
        stream.Read(data, 0, data.Length);
        return data;

    }
}

利用方法:

cmd.Parameters.Add("@Photo", SqlDbType.Image).Value = GetPic() ?? DBNull.Value;
于 2012-05-06T11:48:26.173 に答える