USERS1-5 is not saved in the drawing, this is why you have to use an Xrecord (or some Extended data attached to an unerasable object as the layer "0").
Xrecords (and xdata) can be accessed by any AutoCAD programation environment (AutoLISP, COM, .NET, ObjectARX).
"ABDUL_HASEED" and an Xrecord named "StringValue" which only contains one string.
public void SaveStringInCurrentDrawing(string str)
{
var doc = Application.DocumentManager.MdiActiveDocument;
var db = doc.Database;
using (doc.LockDocument())
using (var tr = new OpenCloseTransaction())
{
var nod = (DBDictionary)tr.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead);
DBDictionary dict;
if (nod.Contains("ABDUL_HASEEB"))
{
dict = (DBDictionary)tr.GetObject(nod.GetAt("ABDUL_HASEEB"), OpenMode.ForRead);
}
else
{
dict = new DBDictionary();
nod.UpgradeOpen();
nod.SetAt("ABDUL_HASEEB", dict);
tr.AddNewlyCreatedDBObject(dict, true);
}
Xrecord xrec;
if (dict.Contains("StringValue"))
{
xrec = (Xrecord)tr.GetObject(dict.GetAt("StringValue"), OpenMode.ForWrite);
}
else
{
xrec = new Xrecord();
if (!dict.IsWriteEnabled) tr.GetObject(dict.ObjectId, OpenMode.ForWrite);
dict.SetAt("StringValue", xrec);
tr.AddNewlyCreatedDBObject(xrec, true);
}
xrec.Data = new ResultBuffer(new TypedValue(1, str));
tr.Commit();
}
}
public string GetSavedStringInCurrentDrawing()
{
var doc = Application.DocumentManager.MdiActiveDocument;
var db = doc.Database;
using (doc.LockDocument())
using (var tr = new OpenCloseTransaction())
{
var nod = (DBDictionary)tr.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead);
if (!nod.Contains("ABDUL_HASEEB"))
return null;
var dict = (DBDictionary)tr.GetObject(nod.GetAt("ABDUL_HASEEB"), OpenMode.ForRead);
if (!dict.Contains("ABDUL_HASEEB"))
return null;
var xrec = (Xrecord)tr.GetObject(dict.GetAt("StringValue"), OpenMode.ForWrite);
if (xrec.Data == null)
return null;
return xrec.Data.AsArray()[0].Value.ToString();
}
}