ユーザーがイメージを選択して後でSQLサーバーテーブルにアップロードできるアプリケーションを構築しようとしています。アップロードされたビットマップをバイト配列に変換してSQL Serverに格納
問題は、格納されたデータが不完全であるように見えることです。私はそれをオンラインコンバータ(すなわちhttp://www.lokowebdesign.com/imagetobinary/)に入れようとしましたが、認識された形式ではないことを示すエラーを受け取ります。
それがテーブルに格納されているように、データは次のようになります。ここでは
0xFFD8FFE000104A46494600010201006000600000FFEE000E41646F626500640000000001FFE10DDE4578696600004D4D002A000000080006013200020000001400000056013B00020000000B0000006A47460003000000010005000047490003000000010058000082980002000000160000007687690004000000010000008C
は、いくつかの関連するコードスニペットです:
//テーブルの定義、グリッド
DataTable grid = new DataTable("Grid");
grid.Columns.Add("ID", typeof(int));
grid.Columns.Add("Description", typeof(String));
grid.Columns.Add("Points", typeof(int));
grid.Columns.Add("Score", typeof(List<int>));
grid.Columns.Add("Current", typeof(int));
grid.Columns.Add("Comments", typeof(List<String>));
grid.Columns.Add("SelectedComment", typeof(int));
grid.Columns.Add("SelectedCommentText", typeof(String));
grid.Columns.Add("Category", typeof(int));
grid.Columns.Add("SelectedScore", typeof(int));
grid.Columns.Add("Image", typeof(byte[]));
//レポート_詳細テーブル
insert = new SqlCommand("INSERT into dbo.report_details (reportID, itemID, points, comments, image) " + " VALUES (@reportID, @itemID, @points, @comments, @image)", con);
insert.Parameters.Add("@reportID", SqlDbType.Char, 5, "reportID");
insert.Parameters.Add("@itemID", SqlDbType.Int, 5, "itemID");
insert.Parameters.Add("@points", SqlDbType.Int, 4, "points");
insert.Parameters.Add("@comments", SqlDbType.Text, 150, "comments");
insert.Parameters.Add("@image", SqlDbType.Image, (int)Math.Pow(2, 20), "image");
ユーザが画像
private async void uploadImage(Object sender, RoutedEventArgs e)
{
Bitmap photo = null;
// this is for tablets
try
{
capturePhoto capture = new capturePhoto();
photo = await capture.getImage();
}
catch (Exception ex)
{
// this is what I am actually using for testing
OpenFileDialog fileDialog = new OpenFileDialog();
if (fileDialog.ShowDialog() == true)
{
photo = (Bitmap)Bitmap.FromStream(fileDialog.OpenFile());
}
}
DataRowView row = (DataRowView)itemGrid.CurrentItem;
ImageConverter converter = new ImageConverter();
byte[] photoBytes = (byte[])converter.ConvertTo(photo, typeof(byte[])); ;
row["Image"] = photoBytes;
}
}
を添付するボタンをクリックしたときに、私は本当に私が提供を望むと呼ばDataGridのバインドテーブルに基づいて
(データベース内)//更新report_details、グリッド
foreach (DataRow row in ds.Tables["Grid"].Rows)
{
DataRow reportDetailsRow = ds.Tables["Details"].NewRow();
reportDetailsRow["reportID"] = id;
reportDetailsRow["itemID"] = row["ID"];
reportDetailsRow["points"] = row["Current"];
List<String> comments = (List<String>)row["Comments"];
reportDetailsRow["comments"] = row["SelectedCommentText"];
if (row["Image"] != null)
{
reportDetailsRow["image"] = row["Image"];
}
ds.Tables["Details"].Rows.Add(reportDetailsRow);
}
detailsAdapter.Update(ds, "Details");
tran.Commit();
}
//詳細は十分ですが、必要に応じてより多くを供給することができます。これは私にとって非常に厄介な問題ですので、私は本当にすべての指導を感謝します。本当にありがとう!
編集:私は、次を試してみましたが、同じ問題が残っている:
private async void uploadImage(Object sender, RoutedEventArgs e)
{
Bitmap photo = null;
try
{
capturePhoto capture = new capturePhoto();
photo = await capture.getImage();
}
catch (Exception ex)
{
OpenFileDialog fileDialog = new OpenFileDialog();
if (fileDialog.ShowDialog() == true)
{
photo = (Bitmap)Bitmap.FromStream(fileDialog.OpenFile());
}
}
DataRowView row = (DataRowView)itemGrid.CurrentItem;
// ImageConverter converter = new ImageConverter();
// byte[] photoBytes = (byte[])converter.ConvertTo(photo, typeof(byte[])); ;
MemoryStream mem = new MemoryStream();
using (mem)
{
photo.Save(mem, System.Drawing.Imaging.ImageFormat.Jpeg);
row["Image"] = mem.ToArray();
}
// row["Image"] = photoBytes;
}
}
は、[このを見てみましょうMSDN](https://msdn.microsoft.com/en-us/library/4f5s1we0(v = vs.110).aspx)を参照してください。あなたの問題がどこにあるかを知るのに役立ちます – Hill