Not able to update table in asp.net using add parameters - c#

I am trying to update table patient using the patientId in mysql from asp.net.By using the debugger I am able to see that the execute query for update is not getting executed. May be there is a problem with the syntax of add parameters for update.I will be extremely grateful if someone can find the solution for it.
The function in service class to update patient record:
public bool UpdatePatient(AppointmentInfo appointmentInfo)
{
bool set = false;
conn.GetConnection();
try
{
MySqlCommand cmd = conn.GetCommand(Queries.UpdatePatient);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("#patientId", Convert.ToInt32(appointmentInfo.patientId));
cmd.Parameters.AddWithValue("#fName", Convert.ToString(appointmentInfo.fName));
cmd.Parameters.AddWithValue("#mName", Convert.ToString(appointmentInfo.mName));
cmd.Parameters.AddWithValue("#lName", Convert.ToString(appointmentInfo.lName));
cmd.Parameters.AddWithValue("#age", Convert.ToInt32(appointmentInfo.age));
cmd.Parameters.AddWithValue("#gender", Convert.ToString(appointmentInfo.gender));
cmd.Parameters.AddWithValue("#address", Convert.ToString(appointmentInfo.address));
cmd.Parameters.AddWithValue("#emailId", Convert.ToString(appointmentInfo.emailId));
if (cmd.ExecuteNonQuery()>0)
{
set = true;
}
else
{
set = false;
}
}
catch (MySqlException)
{
set = false;
}
conn.CloseConnection();
return set;
}
Here Queries is a .resx file where I am writing the update query.The query is
update patient set fName=#fName,mName=#mName,lName=#lName,
age=#age,gender=#gender,address=#address,emailId=#emailId,
where patientId=#patientId
Here is the model class appointmentInfo
public class AppointmentInfo
{
public int appointmentId { get; set;}
public int patientId { get; set; }
public string dName { get; set; }
[Required(ErrorMessage = "Please provide the first name")]
[StringLength(50, MinimumLength = 1, ErrorMessage = "First Name cannot be longer than 50 characters and less than 1 character")]
[RegularExpression(#"^[a-zA-Z]+$", ErrorMessage = "Use alphabets only please")]
public string fName { get; set; }
[RegularExpression(#"^[a-zA-Z]+$", ErrorMessage = "Use alphabets only please")]
public string mName { get; set; }
[Required(ErrorMessage = "Please provide the last name")]
[StringLength(50, MinimumLength = 1, ErrorMessage = "Last Name cannot be longer than 50 characters and less than 1 character")]
[RegularExpression(#"^[a-zA-Z]+$", ErrorMessage = "Use alphabets only please")]
public string lName { get; set; }
[Required]
[Range(1, 100, ErrorMessage = "Enter an age between 1 and 100")]
public int age { get; set; }
[Required(ErrorMessage = "Please provide the gender")]
public string gender { get; set; }
[Required(ErrorMessage = "Mobile Number is required")]
[RegularExpression(#"^(\d{10})$", ErrorMessage = "Please enter proper contact details.")]
public string phNo { get; set; }
[Required(ErrorMessage = "Please provide the address")]
[StringLength(50, MinimumLength = 10, ErrorMessage = "Address cannot be longer than 50 characters and less than 10 characters")]
public string address { get; set; }
[Required(ErrorMessage = "The email Id is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string emailId { get; set; }
[Required(ErrorMessage = "Please select an option")]
public int specialityId { get; set; }
public string specialityName { get; set; }
[Required(ErrorMessage = "Please select an option")]
public int doctorId { get; set; }
[Required(ErrorMessage = "Please provide the date and time")]
[DataType(DataType.DateTime)]
public DateTime dtTime { get; set; }
[NotMapped]
public List<SpecialityInfo> specialityCollection { get; set; }
[NotMapped]
public List<DoctorInfo> doctorCollection { get; set; }
}

Related

Cannot convert from interface to class

I had an error in my method when I try to add to the database my interface and it gives me the error,
Argument 1: cannot convert from 'ForumSite.ActionsAndMethods.Registration.IRegistration' to 'ForumSite.Models.User'.
Here is the code in IRegistration:
using ForumSite.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ForumSite.ActionsAndMethods.Registration
{
public interface IRegistration
{
int UserId { get; }
string Email { get; }
string Password { get; }
string FirstName { get; }
string LastName { get; }
DateTime Birthday { get; }
DateTime DateCreated { get; set; }
string MobileNumber { get; }
string Address { get; }
int UserIsDeleted { get; set; }
int UserRoleId { get; set; }
UserRole UserRole { get; }
}
}
And this is the code in my model:
namespace ForumSite.Models
{
using ActionsAndMethods.Registration;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public partial class User : IRegistration
{
public int UserId { get; set; }
[Display(Name = "Email Address")]
[Required(ErrorMessage = "This field required.")]
[RegularExpression(#"^([a-zA-Z0-9_\-\.]+)#([a-zA-Z]+)\.([a-zA-Z]{2,5})$", ErrorMessage = "Enter Valid Email Address")]
[StringLength(50, MinimumLength = 8, ErrorMessage = "8 to 50 characters only")]
public string Email { get; set; }
[Display(Name = "Password")]
[Required(ErrorMessage = "This field required.")]
[RegularExpression(#"^[a-zA-Z0-9]+$", ErrorMessage = "Alphanumeric characters only")]
[StringLength(50, MinimumLength = 8, ErrorMessage = "8 to 50 characters only")]
public string Password { get; set; }
[Display(Name = "Confirm Password")]
[Required(ErrorMessage = "This field required.")]
[RegularExpression(#"^[a-zA-Z0-9]+$", ErrorMessage = "Alphanumeric characters only")]
[StringLength(50, MinimumLength = 8, ErrorMessage = "8 to 50 characters only")]
public string PasswordConfirm { get; set; }
[Display(Name = "First Name")]
[Required(ErrorMessage = "This field required.")]
[RegularExpression(#"^[a-zA-Z\s]+$", ErrorMessage = "Letters Only.")]
public string FirstName { get; set; }
[Display(Name = "Last Name")]
[Required(ErrorMessage = "This field required.")]
[RegularExpression(#"^[a-zA-Z\s]+$", ErrorMessage = "Letters Only.")]
public string LastName { get; set; }
[Display(Name = "Birthday")]
[Required(ErrorMessage = "This field required.")]
public DateTime Birthday { get; set; }
public DateTime DateCreated { get; set; }
[Display(Name = "Mobile Number")]
[Required(ErrorMessage = "This field required.")]
[RegularExpression(#"^[0-9]+$", ErrorMessage = "Numeric input only.")]
public string MobileNumber { get; set; }
[Display(Name = "Address")]
[Required(ErrorMessage = "This field required.")]
public string Address { get; set; }
public int UserIsDeleted { get; set; }
public int UserRoleId { get; set; }
public UserRole UserRole { get; set; }
}
}
And lastly, my method which adds the user to my database:
using ForumSite.ActionsAndMethods.Registration;
using ForumSite.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace ForumSite.ActionsAndMethods
{
public class RegisterAction : IRegistration
{
ForumDBEntities ent = new ForumDBEntities();
public void Registration(IRegistration reg)
{
reg.DateCreated = DateTime.Now;
reg.UserRoleId = 1;
reg.UserIsDeleted = 0;
ent.Users.Add(reg);
ent.SaveChanges();
}
string IRegistration.Address { get; }
int IRegistration.UserId { get; }
string IRegistration.Email { get; }
string IRegistration.Password { get; }
string IRegistration.FirstName { get; }
string IRegistration.LastName { get; }
DateTime IRegistration.Birthday { get; }
DateTime IRegistration.DateCreated { get; set; }
string IRegistration.MobileNumber { get; }
int IRegistration.UserIsDeleted { get; set; }
int IRegistration.UserRoleId { get; set; }
UserRole IRegistration.UserRole { get; }
}
}
I wonder what causes this error?
While every User implements IRegistration, not every IRegistration instance is a User.
For example, your RegisterAction also implements IRegistration. So if what you wanted to do was possible, you could, in theory have this code:
RegisterAction action = GetRegisterAction();
RegisterAction action2 = new RegisterAction(action);
Which means when you come to do:
ent.Users.Add(reg);
It will fail because reg is not a User.
You could work around it like this:
var user = reg as User;
if(user != null)
{
ent.Users.Add(user);
}
But really you should probably take a look at your structure first as it seems quite odd to be doing this.
You have not told is exactly where you get the compile error but my guess is that it in the line ent.Users.Add(reg) in the Registration method.
To fix the compile error you should change the argument to the Registration method from IRegistration to User:
public void Registration(User reg)
{
reg.DateCreated = DateTime.Now;
reg.UserRoleId = 1;
reg.UserIsDeleted = 0;
ent.Users.Add(reg);
ent.SaveChanges();
}
However, this may trigger another compile error further up the call chain if you try to pass an IRegistration instead of a User to the Registration method.
While User can (and does) implement IRegistration you cannot assume that anything implementing IRegistration is an User. If your code is based on that assumption you will have to fix that to solve your problem.

C# Using If Statements with enum

I want a different viewbag message displayed depending on which option is chosen from a dropdownlist of Enumerators however I'm not sure how to do this. Im using a viewmodel and passing the data through the controller, here is the ViewModel and class, an explanation on how to use if statements with ViewModels/Enumerators would be highly beneficial. I have tried assigning variables but Im realizing that all im doing is saying THIS is THIS, so thats not going to get the data from the Orders Postage enum. Any help and explanations appreciated, still learning.
ViewModel;
{
public class MyOrdersViewModel
{
public int OrderId { get; set; }
public System.DateTime OrderDate { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string PostalCode { get; set; }
public decimal Total { get; set; }
public bool HasBeenShipped { get; set; }
public Postage? PostageList { get; set; }
public List<MyOrderDetails> Details { get; set; }
}
public class MyOrderDetails
{
public string Title { get; set; }
public string Colour { get; set; }
public int Quantity { get; set; }
public decimal UnitPrice { get; set; }
}
}
Controller;
public ActionResult Index(Order order)
{
string currentUser = this.User.Identity.GetUserName();
List<T_shirt_Company_v3.ViewModels.MyOrdersViewModel> list = (from o in new TshirtStoreDB().Orders
.Where(o => o.Username == currentUser)
.OrderByDescending(o => o.OrderDate)
.Select(o => new MyOrdersViewModel()
{
OrderId = o.OrderId,
Address = o.Address,
FirstName = o.FirstName,
LastName = o.LastName,
City = o.City,
OrderDate = o.OrderDate,
PostalCode = o.PostalCode,
Total = o.Total,
HasBeenShipped = o.HasBeenShipped,
PostageList = o.PostageList,
Details = (from d in o.OrderDetails
select new MyOrderDetails
{
Colour = d.Product.Colour,
Quantity = d.Quantity,
Title = d.Product.Title,
UnitPrice = d.UnitPrice
}).ToList()
}).ToList()
select o).ToList();
//#ViewBag.PostageStatus
//ViewBag.ShippedMessage = list.Where(w => w.HasBeenShipped).Any() ? "Order has been shipped" : "Order is being processed";
Postage value = Postage.FirstClass;
Postage value2 = Postage.StandardDelivery;
Postage value3 = Postage.TwentyFourHour;
if (value == Postage.FirstClass)
{
ViewBag.PostageStatus = ("First Class");
}
else
{
ViewBag.PostageStatus = (" Error ");
}
if (value2 == Postage.StandardDelivery)
{
ViewBag.PostageStatus = ("Standard Delivery");
}
if (value3 == Postage.StandardDelivery)
{
ViewBag.PostageStatus = ("24 hour delivery");
}
return View(list);
}
Order Class
namespace T_shirt_Company_v3.Models
{
//[Bind(Exclude = "OrderId")]
public partial class Order
{
[ScaffoldColumn(false)]
public int OrderId { get; set; }
[ScaffoldColumn(false)]
public System.DateTime OrderDate { get; set; }
[ScaffoldColumn(false)]
[Remote("CheckUserName", "Account")]
public string Username { get; set; }
[Required]
[StringLength(16, ErrorMessage = "Your name is too long")]
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Your last name is required.")]
[StringLength(16, ErrorMessage = "Last name is too long.")]
[Display(Name = "Last Name")]
public string LastName { get; set; }
[Required(ErrorMessage = "Address is required.")]
public string Address { get; set; }
[Required(ErrorMessage = "City is required.")]
public string City { get; set; }
[Required(ErrorMessage = "Postcode is required.")]
[Display(Name = "Post Code")]
public string PostalCode { get; set; }
[Required(ErrorMessage = "Country is required.")]
public string Country { get; set; }
[Required(ErrorMessage = "Phone number is required.")]
public string Phone { get; set; }
[RegularExpression(#"[A-Za-z0-9._%+-]+#[A-Za-z0-9.-]+\.[A-Za-z]{2,4}", ErrorMessage = "Email doesn't look like a valid email address.")]
public string Email { get; set; }
[System.ComponentModel.DataAnnotations.Compare("Email")]
[Display(Name = "Confirm your email address")]
public string EmailConfirm { get; set; }
[ScaffoldColumn(false)]
public string PaymentTransactionId { get; set; }
[ScaffoldColumn(false)]
public bool HasBeenShipped { get; set; }
[ScaffoldColumn(false)]
//[ReadOnly(true)]
public decimal Total { get; set; }
[Required]
[Range(0, 2, ErrorMessage = "Select a delivery method")]
public Postage? PostageList { get; set; }
public CardDetails cardDetails { get; set; }
//public List<CardDetails> cardDetails { get; set; }
public List<OrderDetail> OrderDetails { get; set; }
}
public enum Postage {[Display(Name = "Standard Delivery - Free")]StandardDelivery, [Display(Name = "First Class Delivery - £4.99")]FirstClass, [Display(Name = "24 Hour Delivery - £9.99")]TwentyFourHour }
}
Why not simply use a switch statement on the enum? Perhaps the misunderstanding was that the type was nullable. With nullables you can invoke .GetValueOrDefault and then switch on the return for the enum value.
switch (order.Postage.GetValueOrDefault())
{
case Postage.StandardDelivery:
ViewBag.PostageStatus = "Standard Delivery";
break;
case Postage.FirstClass:
ViewBag.PostageStatus = "First Class";
break;
case Postage.TwentyFourHour:
ViewBag.PostageStatus = "24 hour delivery";
break;
default:
ViewBag.PostageStatus = "Error";
break;
}
This prevents the usage of the if statement and simplifies the readability for the user.

Data Annotation Validation for a Group of Fields in Model

I am new to MVC 3 Data Annotations and I just want to ask that if its possible to add Validation on a Group of Fields in Model and Display the validation if none of it has Value?
this is the set of fields in my Data model
public class ContactModel
{
public Nullable<int> Id { get; set; }
[Display(Name = "Contact Firstname")]
[Required(ErrorMessage = "Required!")]
public string ContactFirstname { get; set; }
[Display(Name = "Contact Lastname")]
[Required(ErrorMessage = "Required!")]
public string ContactLastname { get; set; }
[Display(Name = "Contact Middlename")]
public string ContactMiddlename { get; set; }
[Display(Name = "Phone")]
[Required(ErrorMessage = "Required!")]
public string ContactPhone { get; set; }
[Display(Name = "Mobile ")]
[Required(ErrorMessage = "Required!")]
public string ContactMobile { get; set; }
[Display(Name = "Email")]
[Required(ErrorMessage = "Required!")]
public string ContactEmail { get; set; }
[Display(Name = "Job Title")]
[StringLength(50, ErrorMessage = "Max character reached!")]
public string ContactJobTitle { get; set; }
}
And I want to add validation if one from Phone,Mobile or Email doesn't have value
Thanks
You can implement IValidatableObject interface and add validation for all necessary properties:
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if(string.IsNullOrEmpty(Phone) || string.IsNullOrEmpty(Mobile) || string.IsNullOrEmpty(Email))
{
yield return new ValidationResult("Some error message");
}
}
Of course you should remove [Required] attributes then from those properties.

MVC DataReader connection related issue

I have two models with a navigation property in one to the other. Model looks like this:
I am calling the two models in the same view. SuiteCategoryModels as the default and SuitesModels as a partial view.
public class SuiteCategoryModels
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int SuiteCatID { get; set; }
[Required]
[DataType(DataType.Text)]
[Display(Name = "Category")]
[StringLength(50, ErrorMessage = "The {0} must be at least 6 characters long.", MinimumLength = 6)]
public string CatName { get; set; }
[Required]
[DataType(DataType.Text)]
[Display(Name = "Category Description")]
[StringLength(500, ErrorMessage = "The {0} must be at least 6 characters long.", MinimumLength = 6)]
public string CatDesc { get; set; }
public virtual ICollection<SuitesModels> SuitesModels { get; set; }
}
and the second model like this:
public class SuitesModels
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int SuiteID { get; set; }
[Required]
[DataType(DataType.Text)]
[Display(Name = "Suite Name")]
[StringLength(50, ErrorMessage = "The {0} must be at least 6 characters long.", MinimumLength = 6)]
public string SuiteName { get; set; }
[Required]
[DataType(DataType.Text)]
[Display(Name = "Description")]
[StringLength(50, ErrorMessage = "The {0} must be at least 6 characters long.", MinimumLength = 6)]
public string SuiteDesc { get; set; }
[DataType(DataType.ImageUrl)]
[Display(Name = "Picture")]
public string SuitePix { get; set; }
[Required]
[Display(Name = "Rate")]
public int SuiteRate { get; set; }
[Required]
[Display(Name = "Persons Per Suite")]
public int PersonPerSuite { get; set; }
[Required]
[Display(Name = "Status")]
public bool SuiteStatus { get; set; }
public int SuiteCatID { get; set; }
public virtual SuiteCategoryModels SuiteCategory { get; set; }
}
I created a controller action to view like this:
public ActionResult Index()
{
var m = db.SuiteCategoryModels.ToList();
//ViewBag.BB =
//Dispose(false);
return View(m);
}
and the other like this:
public ActionResult SuitesIndex(int id = 0)
{
var mm = db.Suites.Select(r => r.SuiteCategory)
.Where(r => r.SuiteCatID == id);
//SuitesModels suitesmodels = db.Suites.Find(id);
if (mm == null)
{
return HttpNotFound();
}
return PartialView("SuitesIndex", mm.ToList());
}
But I have an error page stating: There is already an open DataReader associated with this Command which must be closed first..
What are the reasons of this error?
What do I do to correct this?
You need to add MultipleActiveResultSets=true; to your connection string.

Confusing data annotation validation

I had been struggling with this issue since morning. I have the following class in my domain service.
[MetadataTypeAttribute(typeof(CompanyRecord.CompanyRecordMetadata))]
public partial class CompanyRecord
{
// This class allows you to attach custom attributes to properties
// of the CompanyRecord class.
//
// For example, the following marks the Xyz property as a
// required property and specifies the format for valid values:
// [Required]
// [RegularExpression("[A-Z][A-Za-z0-9]*")]
// [StringLength(32)]
// public string Xyz { get; set; }
internal sealed class CompanyRecordMetadata
{
// Metadata classes are not meant to be instantiated.
private CompanyRecordMetadata()
{
}
public Nullable<char> AccessToClearance { get; set; }
public Nullable<char> AccessToMarketplace { get; set; }
public Nullable<bool> Active { get; set; }
public string AddressLine1 { get; set; }
public string AddressLine2 { get; set; }
public Nullable<int> AllotedHDSpace { get; set; }
public string City { get; set; }
public int CompanyID { get; set; }
public Binary CompanyLogo { get; set; }
[Required(ErrorMessage = "Company Name is required and must be unique.")]
public string CompanyName { get; set; }
[Range(1, Int32.MaxValue, ErrorMessage = "Company Type is required.")]
public int CompanyTypeID { get; set; }
[Range(1, Int32.MaxValue, ErrorMessage = "Country is required.")]
public Nullable<int> CountryID { get; set; }
public string Description { get; set; }
//[RegularExpression(pattern: #"[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*#(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|tv|COM|ORG|NET|GOV|MIL|BIZ|INFO|MOBI|NAME|AERO|JOBS|MUSEUM|TV|Com|Org|Net|Gov|Mil|Biz|Info|Mobi|Name|Aero|Jobs|Museum|Tv)\b", ErrorMessage = "Please provide a valid email address")]
[RegularExpression(pattern: #"(\w[-._\w]*\w#\w[-._\w]*\w\.[a-zA-z]{2,6})", ErrorMessage = "Please provide a valid email address")]
public string EmployeeEmail { get; set; }
//[RegularExpression(pattern: #"[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*#(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|tv|COM|ORG|NET|GOV|MIL|BIZ|INFO|MOBI|NAME|AERO|JOBS|MUSEUM|TV|Com|Org|Net|Gov|Mil|Biz|Info|Mobi|Name|Aero|Jobs|Museum|Tv)\b", ErrorMessage = "Please provide a valid email address")]
//(\w[-._\w]*\w#\w[-._\w]*\w\.\w{2,3})
[RegularExpression(pattern: #"(\w[-._\w]*\w#\w[-._\w]*\w\.[a-zA-z]{2,6})", ErrorMessage = "Please provide a valid email address")]
[Required(ErrorMessage = "Email is required.")]
public string Email { get; set; }
[StringLength(10, ErrorMessage = "Phone Ext. should not be more than 10 chars.")]
public string EmployeePhoneExt { get; set; }
[StringLength(20, ErrorMessage = "Phone No. should not be more than 20 chars.")]
[RegularExpression(pattern: #"^[0-9\-\(\) ]*[0-9\-\(\)]*$", ErrorMessage = "Please provide a valid Phone No.")]
public string EmployeePhoneNo { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[Range(0, int.MaxValue, ErrorMessage = "Number of projects should be lower than 2,147,483,647.")]
public Nullable<int> NoOfProjects { get; set; }
public Nullable<int> NoOfUsers { get; set; }
[StringLength(10, ErrorMessage = "Phone Ext. should not be more than 10 chars.")]
public string PhoneExt { get; set; }
[StringLength(20, ErrorMessage = "Phone No. should not be more than 20 chars.")]
[Required(ErrorMessage = "Phone No. is required.")]
[RegularExpression(pattern: #"^[0-9\-\(\) ]*[0-9\-\(\)]*$", ErrorMessage = "Please provide a valid Phone No.")]
public string PhoneNo { get; set; }
[RegularExpression(pattern: #"^[a-zA-Z0-9\-\(\)\* ]*[a-zA-Z0-9\-\(\)\*]*$", ErrorMessage = "Postal codes cant' contain special characters except for -, (, ), * and spaces.")]
public string PostalCode { get; set; }
public string Province { get; set; }
public string Website { get; set; }
public int MarketID { get; set; }
public int AffiliationID { get; set; }
public string CallLetter { get; set; }
}
}
PROBLEM: I need to create a validation rule that woudl require MarketID and Affiliation ID only when CompanyTypeID is equivalent to 1, 3, 5, 9 and 11 is there someone out there who has an idea on how to solve this?
You should use the custom validation.
There are some topics for your question below:
1 http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.customvalidationattribute(vs.95).aspx
2 http://blogs.microsoft.co.il/blogs/bursteg/archive/2009/04/14/net-ria-services-custom-validation.aspx

Categories