将空值插入SQL Server中的int列

jaw*_*wed 1 c# asp.net

public bool insertRowIntoApplicant(int AnsId, string Name)
{
    string CS = Utilities.GetConnString();

    using (SqlConnection con = new SqlConnection(CS))
    {
        SqlCommand cmd = new SqlCommand("Insert Into ApplicantTable (AnswerableId, Name) values (@AnsId, @Name);

        SqlParameter paraAnsId = new SqlParameter()
                    {
                        ParameterName ="@AnsId",
                        SqlDbType = System.Data.SqlDbType.Int,
                        Direction = System.Data.ParameterDirection.Input,
                        Value = AnsId
                    };
        cmd.Parameters.Add(paraAnsId);
        cmd.Parameters.Add(paraName);
    }
}
Run Code Online (Sandbox Code Playgroud)

我从隐藏字段中获取值

int getAnswerabelValue = Convert.ToInt32(hfAnswerableID.Value);

if (dal_Obj1.insertRowIntoApplicant(getAnswerabelValue, Name)
{
}
Run Code Online (Sandbox Code Playgroud)

我的问题是getAnswerabelValue有时可以为null,那么如何更改我的代码呢?

Tim*_*ter 6

该列可以为空?那么变量也应该是Nullable<int>.

int? ansIdOrNull = null;
int ansId;
if(int.TryParse(hfAnswerableID.Value, out ansId))
    ansIdOrNull = ansId;

// pass ansIdOrNull to the method...
Run Code Online (Sandbox Code Playgroud)

您必须使用DBNull.Value以防万一null:

public bool insertRowIntoApplicant(int? ansId, string Name)
{
    string CS = Utilities.GetConnString();
    using (SqlConnection con = new SqlConnection(CS))
    {
       SqlCommand cmd = new SqlCommand("Insert Into ApplicantTable(AnswerableId,Name) values(@AnsId,@Name);
       SqlParameter paraAnsId = new SqlParameter()
        {
            ParameterName ="@AnsId",
            SqlDbType = System.Data.SqlDbType.Int,
            Direction = System.Data.ParameterDirection.Input,
            Value = (object)ansId ?? DBNull.Value
        };
        // initialize paraName
        cmd.Parameters.Add(paraAnsId);
        cmd.Parameters.Add(paraName);
    }
}
Run Code Online (Sandbox Code Playgroud)