2014-03-07 65 views
0

我无法弄清楚我的生活。标题错误继续弹出,但我看不出问题出在哪里:参数@firstName没有默认值

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); 
     } 
    } 
} 

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

回答

0

也许您的表FIRST_NAME列设置为NOT NULL。检查actionItem.FirstName的值,确保这是NOT NULL

你应该调试你的代码,看看actionItem.FirstName是不是NULL。

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

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

希望这有助于!

0

使用try catch块确切地知道问题所在 把一个调试点insertactionitem方法的开始,然后按F10一步

一个脚印在文本框中使用插入查询值,然后尝试在访问中运行查询

0

以前在stackoverflow中处理过类似的问题。你也可以看看HERE

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

此外,给出错误的字段被设置为NOT NULL。

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

并添加try-catch块也是一个好主意,以捕捉确切的错误。

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

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

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

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