将字符串转换为smallint

时间:2014-12-11 21:18:08

标签: c# asp.net entity-framework

我有radiobutton(男性和女性检查)如果我尝试将字符串(Sex)转换为数据库(smallint),我会收到错误的问题

这是我的代码:

public class MakeAppointment
{
    private MakeApptEntities newAppointment = new MakeApptEntities();

    public void add( string FirstName, string LastName,  string Sex) {

    tbl_MakeAppointment_MA nAppt = new tbl_MakeAppointment_MA();
    tbl_PatientDetails_PD pDetails = new tbl_PatientDetails_PD(); 

    pDetails.PD_FirstName = FirstName;
    pDetails.PD_LastName = LastName;
    pDetails.PD_Sex = Convert.ToInt16(Sex);
}

3 个答案:

答案 0 :(得分:1)

通常对于这样的事情,我喜欢使用enum,因为EF现在支持枚举。如果您无法更改模型和数据库架构,则可以创建一个可以为您进行转换的扩展方法。尝试这样的事情:

public static class MyExtensions
{
    public static Int16 ToDbValue(this string sex)
    {
        switch (sex.ToLower())
        {
            case "male":
                return 0;
            case "female":
                return 1;
            default:
                // throw exception, or return what you want as default
         }
    }
}

然后,您可以在add方法中使用它:

pDetails.PD_Sex = sex.ToDbValue();

注意:更改上面switch/case中的值以对应您使用的值。

确保您的MakeAppointments课程中可以看到此课程。最简单的方法是将代码放在同一个文件中。如果您认为自己在其他地方使用ToDbValue方法,请为此类创建一个单独的文件,并确保它与MakeAppointments位于同一名称空间。

答案 1 :(得分:0)

使用Int16.Parse而不是convert.toInt16:
pDetails.PD_Sex = Int16.Parse(sex);

*使用常量的枚举类型也是一个非常好的主意!

<小时/> 亲爱的Asghraf,我认为问题出在其他地方,我对Int16.Parse非常肯定。检查输入参数的值并通过放置断点来跟踪程序。 请查看以下关于将字符串转换为数字的链接:
http://msdn.microsoft.com/en-us/library/bb397679.aspx

答案 2 :(得分:0)

我确实将数据库中的PD_Sex数据类型从tiny int更改为int,现在可以正常使用Int32.Parse(Sex)非常感谢大家的支持