Могу ли я добавлять объекты в свою базу данных Access?

#c# #.net #ms-access

#c# #.net #ms-access

Вопрос:

У меня есть класс, который хранит несколько значений. В настоящее время я составляю список объектов, а затем использую их, но теперь мне нужно перейти на базу данных Access. Может ли кто-нибудь сказать мне, могу ли я поместить эти объекты в базу данных?

Ответ №1:

Возможно, вы сможете сериализовать свои объекты в XML, а затем записать их в Memo поле (называемое Long Text field в Access 2013). Следующий код работает для меня:

 public class MyClass
{
    public string Name { get; set; }
    public List<string> FavoriteThings { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var myObject = new MyClass();
        myObject.Name = "Gord";
        var myFavs = new List<string>();
        myFavs.Add("bicycles");
        myFavs.Add("ham");
        myObject.FavoriteThings = myFavs;

        var xs = new System.Xml.Serialization.XmlSerializer(myObject.GetType());
        var sw = new System.IO.StringWriter();
        xs.Serialize(sw, myObject);

        using (var con = new OleDbConnection())
        {
            con.ConnectionString =
                    @"Provider=Microsoft.ACE.OLEDB.12.0;"  
                    @"Data Source=C:UsersPublicDatabase1.accdb;";
            con.Open();
            using (var cmd = new OleDbCommand())
            {
                cmd.Connection = con;
                cmd.CommandText = "INSERT INTO tblObjects (ObjectID, ObjectXML) VALUES (?,?)";
                cmd.Parameters.AddWithValue("?", 1);
                cmd.Parameters.AddWithValue("?", sw.ToString());
                cmd.ExecuteNonQuery();
            }
            con.Close();
        }
    }
}
  

Когда я открываю таблицу Access, выбираю поле Memo и нажимаю ShiftF2, чтобы «увеличить» его, я вижу

XmlMemo.png