LeaveDetails.csという名前のクラスがあります
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace LeaveMgmt_14dec
{
[Serializable]
public class LeaveDetails
{
public string date;
public string leave_type;
}
}
次に、LeaveDetails クラスのオブジェクトのリストを作成しました。
List<LeaveDetails> Details = new List<LeaveDetails>();
今、私はそれをシリアル化し、datababse、つまり Microsoft SQL Server 2008 に保存しました。
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, Details);
//Saving to db
SqlConnection con = new SqlConnection("Data Source=IND492\\SQLEXPRESS;Initial Catalog=LeaveMgmt;Integrated Security=True");
{
SqlCommand cmd = new SqlCommand("insert into LeaveDetailsTable values (@leave_details)", con);
con.Open();
byte[] bytes = new byte[ms.Length];
ms.Write(bytes, 0, bytes.Length);
cmd.Parameters.AddWithValue("@leave_details", bytes);
cmd.ExecuteNonQuery();
}
今、データベースに保存するときにどのデータ型を選択すべきか疑問がありますか? 実際にテーブル LeaveDetailsTable(L_ID int , leave_details nvarchar(50)) を使用しました
しかし、データベースからの取得中にエラーが表示されます
System.InvalidCastException: タイプ 'System.String' のオブジェクトをタイプ 'System.Byte[]' にキャストできません。
データベースから取得するためのコードは次のとおりです。
SqlConnection con = new SqlConnection("Data Source=IND492\\SQLEXPRESS;Initial Catalog=LeaveMgmt;Integrated Security=True");
{
SqlCommand cmd = new SqlCommand("select leave_details from LeaveDetailsTable where L_ID=1", con);
con.Open();
byte[] bytes = (byte[])cmd.ExecuteScalar();
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream(bytes);
ms.Position = 0;
List<LeaveDetails> mc = (List<LeaveDetails>)bf.Deserialize(ms);
}