C# - Serializing A Dataset To A Strongly Type Business Object Property?
Nov 14, 2009
In a vb .net winforms app I am trying out something for "wide and shallow" children of a record. I use strongly typed business objects ( Strataframe ).My plan is to have a number of "child tables" collected in a dataset I drop on the form. they have no correspondence in persisted data, so the dataset is untyped and I am creating the schema through the property sheet for the tables. Each table is the datasource for a datagridview in the interface.
In my proof of concept sample, My main businessobject (CustomerBO) interacts with a SQL Server 2008 table with fields - pk, name, - and a third column which is currently varchar(max) as I considered XML but could just as easily be varbinary(max) if that works better for holding the serialized dataset.
bo.bigfield will be the strongly typed prop I want to hold the byte() array or XML or whatever that represents the dataset for that record.So, the question in a nutshell - how do I convert a dataset to a single datum and reproduce the dataset from that datum. This is my first foray into datasets, datagridviews as well so if there are better ways to accomplish any of that I'm listening.
I'm having a real problem with serializing data. I understand that its designed to basically copy the structure and data of a structure. In my case, I have the state of a DVD that i would like to save (persist) to disk. [Code] error: 'Error Generating XML', Inner Exception: "Unable to cast COM object of type 'System.ComObject' to class type 'DirectShowLib.DVDState'.
COM components that enter the CLR and do not support IProvideClassInfo or that do not have any interop assembly registered will be wrapped in the ComObject type. Instances of this type cannot be cast to any other class; however they can be cast to interfaces as long as the underlying COM component supports QueryInterface calls for the IID of the interface."
I was just wondering if it is possible to apply an attribute to a property within a business object (MyBusinessObject) such that after the DataSource of a grid is set to a List(Of MyBusinessObject), the visible property of the column will automatically be false. For example:
myGrid.DataSource = New List(Of MyBusinessObject) Public Class MyBusinessObject
using an object-binding I have a an object representing "Employee". The employee has an ID-property. The ID of the employee must be unique.
My validation of the entered data is handled in the property set part of the object. In general, I validate criteria belonging to the object to validate only (eg numeric range of the ID, if it's value is not empy, ...). But in this case I need to know all ID's from the other employees. My tried this:
When the user clicks an "Edit" button on my form, I want a box to come up which allows the user to edit a DataTable in a strongly-typed DataSet. What's the best way to do this?
I have a requirement where I need to have a "type safe" way of accessing property names, without actually instantiating an object to get to the property. To give an example, consider a method that takes as arguments a list of IMyObject and a string that represents a property name (a property that exists in IMyObject).
The methods implementation will take the list and access all the objects in the list using the property name passed... for some reason or another, we won't dwell on that!!
Now, I know that you can do this using an instantiated object, something like ...
Dim x as MyObject = nothing Dim prop As PropertyInfo = PropHelper.GetProperty(Of MyObject)(Function() x.MyProperty)
Where my helper method uses reflection to get the name of the property as a string - there are numerous examples of this flying around on the web!
But I don't want to have to create this pointless object, I just want to do something like MyObject.MyProperty! Reflection allows you to iterate through a types properties and methods without declaring an object of that type... but I want to access a specific property and retrieve the string version of its name without iteration and without declaring an object of that type!
The main point here is that although I am trying to get the property name as a string... this is done at run time... at compile time, I want this to be type safe so if someone changes the property name, the compilation will break.
Firstly here's the code and i will explain my problem underneath. [code...]
Now as you can see I have a variable that holds a value member of the combo box Products which is the productID of the current product selected. Then it searchers through the products datatable and once its found the correct product or not it stores the answer in slectedproductrow. next I test to see if selected product row has found the product if it has i then see if the product has already been added to the order by seraching the the customer current order datatable if it hasn't it adds the current information to the order by using selected product row.
Now the problem i get is when i add the same product it still adds the information again as currentorderrow comes back as nothing everytime even if the product has been added before but if it was in the table which it should be it should skip that bit and just go to add the current qtys toghther.Also if i go to add a diffrent product it overwrites the the other one. So i can't store the customer order. Its like i can't store more than one row. By the way I have a datagrid and can see the product get over wrriten.
Currently I am working on a project developed using VB.Net in Visual Studio 2010.Previously they were using Sql queries directly into SqlCommand of System.Data.SqlClient, but then after i shifted everything to Strongly Typed DataSet and started using TableAdapters every where..Now i just wanna ask that is this way is good for a project...Or Should i shift back to old ones using Just SqlCommands
I am trying to sqlbulkcopy. I have a dataset defined (.xsd). It seems that I cannot use it with sqlbulkcopy. All the information I can find on sqlbulkcopy shows that it can only take a connection string or a variable that contains the connection string.
I want to bind a column of a strongly typed dataset to a combobox. But the problem is i have to get only the distinct values from the column and also when a user inserts a value into that column the new value should be showned in the combobox at the same time.And also i want to make the first row of the combobox to be unselectable..[code]how to make this column distinct values
I cannot figure out for the life of me why I cannot reference a dataset table using the strongly typed name. I created a "news" table in a dataset to write out and read in a simple xml.
If you look at the code below this does not work: 'Dim TableFail As ADataSet.NewsDataTable = ds.NewsDataTable 'Does not work
I can access the table by using an untyped name however: Dim NewsTable As ADataSet.NewsDataTable = ds.Tables("News") What is the proper way of accessing the datasets 'typed' datatables name.
How do I close a connection of strongly typed dataset? I want to backup my database with a zip technique. But I can't access it when my program is open. I've closed connections of all table adapters but it didn't work.
What is the simplest/cleanest/easiest/best way to handle Null value of a Strongly Typed DataSet in the following case :A base class has a Nullable value that is set through it's constructorThe derived class's constructor has Strongly Typed DataSet Row as parameter and it Throw exception when accessing a null value.Here a simplified example to demonstrate the problem I'm facing. Any resemblance to your code is purely coincidental.
Public MustInherit Class BaseClass Private _Number as Nullable(of integer) Public Sub New(Number as Nullable(of integer))
I am working on a project, and have defined a strongly typed dataset. Normally I create a single instance of a dataset and use through out an application. In this case I have need to clone the dataset, and clear 2 of the table and then fill those 2 tables with fake data for creating a sample report. at the end of the retuine, I dispose of the dataset. So I was think all was good.
I'm not positive I'm going about this the right way. I've got a suite of applications that have varying types of output (custom defined types).For example, I might have a type called Widget:
Class Widget Public name as String End Class
Throughout the course of operation, when a user experiences a certain condition, the application will take that output instance of widget that user received, serialize it, and log it to the database noting the name of the type.
Now, I have other applications that do something similar, but instead of dealing with Widget, it could be some totally random other type with different attributes, but again I serialize the instance, log it to the db, and note the name of the type. I have maybe a half dozen different types and don't anticipate too many additional ones in the future.
After all this is said and done, I have an admin interface that looks through these logs, and has the ability for the user to view the contents of this data thats been logged. The Admin app has a reference to all the types involved, and with some basic switch case logic hinged upon the name of the type, will cast it into their original types, and pass it on to some handlers that have basic display logic to spit the data back out in a readable format (one display handler for each type)NOW... all this is well and good...Until one day, my model changed. The Widget class now has deprecated the name attribute and added on a bunch of other attributes. I will of course get type mismatches in the admin side when I try to reconstitute this data.
I was wondering if there was some way, at runtime, i could perhaps reflect through my code and get a snapshot of the type definition at that precise moment, serialize it, and store it along with the data so that I could somehow use this to reconstitute it in the future?
Dim XmlFile As FileStream = New FileStream(path, FileMode.Open) Dim Serializer As XmlSerializer = New XmlSerializer(GetType(gpxType)) ''here I get error Dim GPX As gpxType = New gpxType
[code]....
I get InvalidOperationException was unhandled. Whats wrong?
I've got a custom NumericEditor control that has a nullable Decimal property called Value. When I bind a data field to Value, I'd like to retrieve the underlying Type of the data that's bound, so that I can restrict the use of decimal places if the source field is an integral data type.I figure I'd have to do this in the BindingContextChanged event, but how do I get the Type of the data field from the binding itself? My Google-Fu is failing me at the moment.
In short, I'm looking for something like the GetValueType method mentioned in the following question: Simple databinding - How to handle bound field/property change. Winforms, .Net I imagine this method would also be handy if the Value property was an Object.
I am building a code behind page that has a public property (MyDTOItem) which is essentially a DTO object (dtDTOItem) Note: In my code the Get and Set are actually real code (I stripped it for the example).The problem I am having is in the Page_Load event. When I set the .Member1 property of the DTO object the Get code runs and not the Set and therefore the DTO ibject property .Member1 never gets assigned. I figured out that if I add code (MyDTOItem = New dtDTOItem) to the Page_Load event then it will set the value correctly. What I am trying to figure out is how to initialize the property object without having to do it explicitly. It has to be an extended property because I have custom Get and Set code.
Public Property MyDTOItem As dtDTOItem Get End Get Set(value As dtDTOItem)
I am building a code behind page that has a public property (MyDTOItem) which is essentially a DTO object (dtDTOItem) Note: In my code the Get and Set are actually real code (I stripped it for the example).
The problem I am having is in the Page_Load event. When I set the .Member1 property of the DTO object the Get code runs and not the Set and therefore the DTO ibject property .Member1 never gets assigned.
I figured out that if I add code (MyDTOItem = New dtDTOItem) to the Page_Load event then it will set the value correctly. What I am trying to figure out is how to initialize the property object without having to do it explicitly. It has to be an extended property because I have custom Get and Set code.
Public Property MyDTOItem As dtDTOItem Get End Get
I have a SQL Server database for which I have created a strongly-typed DataSet (using the DataSet Designer in Visual Studio 2008), so all the adapters and select commands and whatnot were created for me by the wizard.
It's a small database with largely static data, so I would like to pull the contents of this DB in its entirety into my application at startup, and then grab individual pieces of data as needed using LINQ. Rather than hard-code each adapter Fill call, I would like to see if there is a way to automate this (possibly via Reflection). [code]...
I have a vb.net 2010 windows forms application with a strongly typed dataset. I am storing the database connection path in a txt file so that the database's location may be changed in the future for whatever reason. The typical location of the connection is the read only app.config from what I gather. I have the datasets modifier set as public but I am having trouble finding how to access the connection object for the adapter.
I'm sorry but Microsoft did not think about this very well. I have used the dataset wizard to connect to my sql server and the connection string was placed in the app.config file. The only problem with this is that you can not write to it nor change string at runtime. So I need a way for each one of my users to specify their connection either during installation or after installation. I would appreciate any help in this matter.
I am sending XML externally. One of the node called "datafield" has an element called "value". This may contain normal text content, or an html content (which I need to wrap in CData). So, I created a base class (ProvisionDataField) with 2 classes inherits from it (ProvisionTextField, and ProvisionCDataField) as follows:[code]
I need to be able to change the connection string of a strongly typed dataset at runtime. I have gone into the settings.vb page and written this code:
Namespace My 'This class allows you to handle specific events on the settings class: ' The SettingChanging event is raised before a setting's value is changed. ' The PropertyChanged event is raised after a setting's value is changed. ' The SettingsLoaded event is raised after the setting values are loaded. ' The SettingsSaving event is raised before the setting values are saved. [Code] .....
The way the code is suppose to work is that when a user logs in, the application gets the user's site ID (gvUserSite), then uses that to set the connection string. But when I log on with a SiteID of "21" it always uses the Case Else value. Also when I set breakpoints in settings.vb the application never stops on the breakpoints I set during runtime. As if the breakpoints were never set. Also if I put any code in the "MySettings_SettingChanging" in settings.vb I get a runtime error "The debugger cannot continue running the process. Process was terminated.
I've been reading up on this whole subject, but I never came across this specific problem. I already understand that the whole idea of serializing an entire form is a horrible idea and just doesn't work. But, I am encountering a bit of a different problem. I have a class that inherits the "button" form object, that I call DataButton.
Now for my problem. I want to be able to serialize this class, but I don't need any of the information from the actual button class. Is there any way to bypass the fact that I can't set the button form object to Serializable() and notify VB that when serialization is to occur, it should simply skip over that information? Theoretically, if such a procedure were possible, I'd be able to do the entire serialization without a hitch.
I came up with the idea earlier of removing the "inherits" feature from the class, and having simply a button within the class, but that makes my program really difficult to work with as I am constantly changing the location, size, backgroundImage, text, and whatnot. Thus, immediate updates would be much tougher to work with.
I am using a Strongly Typed Dataset as DAL. I want to return a single column from my table for that i wrote the code as
SELECT DISTINCT Floor FROM Room WHERE (Building = @Building)
But when i previewed the data, it shows me all the columns of the table with Null Value and the column with primary key has -1 value. This condition raise an Exception when i link this query to a ComboBox ..
Due to a discussion in another thread , I am starting to use business object in an 3-Tiered windows app. As a starting point, I am trying to build objects/classes on a table from my database.
The issue I'm currently having is mapping multiple GUI fields to object properties (i.e. Presentation layer to Business Logic Layer mapping). To be more specific, this is in VB.Net 2.0 WinForms. The nature of the solution requires us to have 4 columns which exhibit the same type of behavior on our GUI - each column consisting of 11 textboxes (we'll just use this small sample size, as the problem extends beyond 11 textboxes).
What I am currently doing is setting the tag of each textbox in all four columns to a value like so:
As you can see this can get very bad, rather quickly. Currently we're setting 43 some odd properties that can be mapped to -- thus that select statement is extremely long -- many of which are embedded in multiple methods to try and attempt DRY (I've watered down the code to essentially a conceptual implementation).
Question is: how can I refactor this? I've attempted using a dictionaries/hashes to a certain extent, but it either became overly complex, or just plain didn't make an implementation sense as it convoluted the problem even more.
i have a complex object that holds a WPF Canvas with many child canvases, rectangles and, lines. The object includes some home grown classes as well. The main object and the home grown classes have the <Serializable()> attribute set. I tried the general formatter.Serialize(strm, rb_x) to serialize the object to a memory stream. I then found out that WPF classes are set as serializable. So after some research I discovered the System.Runtime.Serialization and found a generic Serialization Surrogate.So after some debugging I was able to serialize the object to a memory stream then copied the stream to an array of bytes then store that array in an OLE field in an MS Access table.
When I read back the access record and copy the OLE field byte array back to a memory stream and then de-serialize it back to the object I get a SerializationException "Error binding to target method."
So question #1 - is what I am trying even possible?Question #2, (assuming #1 is yes) do I need to do something special with WPF Baml type objects.