1

重複の可能性:
byte[] を C# から SQL Server データベースに保存する

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);
}
4

1 に答える 1

2

さて、あなたは読むことができるので、それはかなり明白なはずです、または?

System.InvalidCastException:タイプ'System.String'のオブジェクトをタイプ'System.Byte[]'にキャストできません。

Serieaization(XML / XAMLではなく標準)はバイナリです。そのため、varcharは機能しません。varbinaryを使用します。Varbinaryはバイト配列として返されます。

于 2012-12-17T10:53:15.057 に答える