参数@firstName没有默认值

时间:2014-03-07 04:11:19

标签: c#

我无法想象我的生活。标题错误继续弹出,但我看不出问题所在:

class Repository
{
    private OleDbConnection getConnection()
    {
        return new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\tb2\Users\tburmeister\Documents\Access Databases\Staff_Actions.accdb;Jet OLEDB:Database Password=ECDistrict;");
    }
    public List<ActionItem> getActionItemList()
    {
        return null;
    }

    public void insertActionItem(ActionItem actionItem)
    {
        OleDbConnection con = getConnection();

        OleDbCommand cmd = new OleDbCommand("Insert into [Actions] ([RECORD_ENTERED_DATE], [BOARD_DATE],[FIRST_NAME],[LAST_NAME],[ADDRESS],[PO_BOX],[CITY],[STATE],[ZIP],[EMP_PHONE],[LOCAL_YEARS],[OUTSIDE_YEARS],[TOTAL_YEARS],[EMP_HISTORY],[GROUP_TYPE],[TERM_TYPE],[TOTAL_FTE],[POSITION],[LOCATION],[POSITION_PCT],[SALARY],[DATE_OF_ACTION],[ACTION],[FUNDING],[REASON]) Values(@recordEnteredDate, @boardDate, @firstName, @lastName, @Addy, @poBox, @city, @state, @zip, @employeePhone, @localYears, @outsideYears,@totalYears, @employeeHistory, @groupType, @termType, @totalFTE, @position, @location, @positionPercentage, @salary, @dateOfAction, @action, @funding, @reason)", con);
        cmd.Parameters.Add("@recordEnteredDate", OleDbType.Date).Value = actionItem.RecordEnterdDate;
        cmd.Parameters.Add("@boardDate", OleDbType.Date).Value = actionItem.BoardDate;
        cmd.Parameters.Add("@firstName", OleDbType.VarChar).Value = actionItem.FirstName;
        cmd.Parameters.Add("@lastname", OleDbType.VarChar).Value = actionItem.LastName;
        cmd.Parameters.Add("@Addy", OleDbType.VarChar).Value = actionItem.Address;
        cmd.Parameters.Add("@poBox", OleDbType.VarChar).Value = actionItem.PoBox;
        cmd.Parameters.Add("@city", OleDbType.VarChar).Value = actionItem.City;
        cmd.Parameters.Add("@state", OleDbType.VarChar).Value = actionItem.State;
        cmd.Parameters.Add("@zip", OleDbType.Integer).Value = Convert.ToInt32(actionItem.Zip);
        cmd.Parameters.Add("@employeePhone", OleDbType.Integer).Value = Convert.ToInt32(actionItem.EmpPhone);
        cmd.Parameters.Add("@localYears", OleDbType.Integer).Value = Convert.ToInt32(actionItem.LocalYears);
        cmd.Parameters.Add("@outsideYears", OleDbType.Integer).Value = Convert.ToInt32(actionItem.OutsideYears);
        cmd.Parameters.Add("@totalYears", OleDbType.Integer).Value = Convert.ToInt32(actionItem.TotalYears);
        cmd.Parameters.Add("@employeeHistory", OleDbType.VarChar).Value = actionItem.EmployeeHistory;
        cmd.Parameters.Add("@groupType", OleDbType.VarChar).Value = actionItem.GroupType;
        cmd.Parameters.Add("@termType", OleDbType.VarChar).Value = actionItem.TermType;
        cmd.Parameters.Add("@totalFTE", OleDbType.VarChar).Value = actionItem.TotalFTE;
        cmd.Parameters.Add("@position", OleDbType.VarChar).Value = actionItem.Position;
        cmd.Parameters.Add("@location", OleDbType.VarChar).Value = actionItem.Location;
        cmd.Parameters.Add("@positionPercentage", OleDbType.VarChar).Value = actionItem.PositionPCT;
        cmd.Parameters.Add("@salary", OleDbType.VarChar).Value = actionItem.Salary;
        cmd.Parameters.Add("@dateOfAction", OleDbType.VarChar).Value = actionItem.DateOfAction;
        cmd.Parameters.Add("@action", OleDbType.VarChar).Value = actionItem.Action;
        cmd.Parameters.Add("@funding", OleDbType.VarChar).Value = actionItem.Funding;
        cmd.Parameters.Add("@reason", OleDbType.VarChar).Value = actionItem.Reason;
        try 
        {
            con.Open();

            cmd.ExecuteNonQuery();
            con.Close();
        }
        catch (OleDbException ex)
        {
            con.Close();
            Console.WriteLine(ex.Message);
        }
    }
}

有人可以对此有所了解吗?

4 个答案:

答案 0 :(得分:0)

表格中的FIRST_NAME列可能会设为NOT NULL。检查actionItem.FirstName的值,确保这是NOT NULL

您应该调试代码以查看actionItem.FirstName是否为NULL。

请注意,.Value为null的参数不会全部通过。 所以你需要这样做:

cmd.Parameters.Add("@param", OleDbType.VarChar).Value = object ?? DBNull.Value;

希望这有帮助!

答案 1 :(得分:0)

使用try catch块确切地知道问题所在 在insertactionitem方法的开始处设置调试点,然后按 F10 逐步移动

在文本框中使用插入查询值,然后尝试在访问

中运行查询

答案 2 :(得分:0)

之前已经在stackoverflow中处理过类似的问题。你也可以从HERE看一下那个。

问题可能是参数名称在代码和存储过程/查询中不匹配。

同样,给出错误的字段设置为NOT NULL。

所以你也可以仔细检查拼写,以确保不是这种情况。

添加try-catch块也是捕捉确切错误的好主意。

作为最后一个建议,试试看看会发生什么:

cmd.Parameters.Add(new OleDbParameter("@firstName", actionItem.FirstName));

答案 3 :(得分:0)

我怀疑你的问题在于actionItem.BoardDate

我不确定它是什么类型,但如果由于某种原因它为空或无效,那么它可能会破坏接下来的参数。