C# 参数@firstName没有默认值

C# 参数@firstName没有默认值,c#,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

我一辈子都搞不懂这件事。标题错误继续弹出,但我看不出问题出在哪里:

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);
        }
    }
}
类存储库
{
专用OleDbConnection getConnection()
{
返回新的OLEDB连接(@“Provider=Microsoft.ACE.OLEDB.12.0;数据源=\\tb2\Users\tburmeister\Documents\Access Databases\Staff\u Actions.accdb;Jet-OLEDB:Database Password=ecdistric;”;
}
公共列表getActionItemList()
{
返回null;
}
公共void insertActionItem(ActionItem ActionItem)
{
OleDbConnection con=getConnection();
OleDbCommand cmd=新的OleDbCommand(“插入[行动]([记录输入日期],[董事会日期],[姓名],[住址],[邮政信箱],[城市],[州],[邮政编码],[EMP电话],[本地年],[外部年],[总年],[管理历史],[集团类型],[期限类型],[全职员工总数],[职位],[位置],[职位PCT],[工资],[行动日期],[行动资金],[REASON])值(@recordEnteredDate、@boardDate、@firstName、@lastName、@Addy、@poBox、@city、@state、@zip、@employeePhone、@localYears、@outsideYears、@totalYears、@employeeHistory、@groupType、@termType、@totalFTE、@position、@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;
尝试
{
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
捕获(OLEDBEException ex)
{
con.Close();
控制台写入线(例如消息);
}
}
}

有人能解释一下吗?

也许您的表中的
名字列设置为
非空。检查
actionItem.FirstName
的值,确保该值
不为NULL

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

请注意,完全不会传递.Value为null的参数。 因此,您需要这样做:

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

希望这有帮助

使用try-catch-block来准确了解问题所在 在insertactionitem方法的开头放置一个调试点,然后按F10键逐步移动


在文本框中使用insert查询值,然后尝试在access中运行查询。类似的问题以前在stackoverflow中处理过。你也可以从另一个角度看这个

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

此外,给出错误的字段设置为NOTNULL

因此,您还可以仔细检查拼写,以确保情况并非如此

添加try-catch块也是捕获准确错误的好方法

最后一个建议是,试试这个,看看会发生什么:

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

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

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