您好我正在尝试通过我正在构建的C#WinForm为我的SQL编写一些值。我收到一个我无法解决的错误。
我称之为:
SQL.insertIntoChildTable(Convert.ToInt32(child_IDTextBox.Text),
child_FirstNameTextBox.Text,
child_LastNameTextBox.Text,
Convert.ToInt32(parent1IDTextBox.Text),
Convert.ToInt32(parent2IDTextBox.Text),
birthdayDateTimePicker.Value.ToShortDateString(),
age.ToString(),
null, null, null, null, null,
child_disciplineTextBox.Text, child_NotesTextBox.Text);
由此:
public static void insertIntoChildTable(int childID, string firstName, string lastName, int parent1ID, int parent2ID, string birthdate, string age, string lastCheckedInTime, string lastCheckedInBy, string lastCheckOutTime, string lastCheckedOutBy, string ageGroup, string disciplineNotes, string otherNotes)
{
try
{
using (SqlConnection connection = new SqlConnection(Global.connectionString))
using (SqlCommand command = connection.CreateCommand())
{
command.CommandText = "INSERT INTO ProjectList (ChildID, FirstName, LastName, Parent1ID, Parent2ID, Birthdate, Age, LastCheckedInTime, LastCheckedInBy, LastCheckOutTime, LastCheckedOutBy, AgeGroup, DisciplineNotes, OtherNotes) VALUES (@childID, @firstName, @lastName, @parent1ID, @parent2ID, @birthdate, @age, @lastCheckedInTime, @lastCheckedInBy, @lastCheckOutTime, @lastCheckedOutBy, @ageGroup, @disciplineNotes, @otherNotes)";
command.Parameters.AddWithValue("@childID", childID);
command.Parameters.AddWithValue("@firstName", firstName);
command.Parameters.AddWithValue("@lastName", lastName);
command.Parameters.AddWithValue("@parent1ID", parent1ID);
command.Parameters.AddWithValue("@parent2ID", parent2ID);
command.Parameters.AddWithValue("@birthdate", birthdate);
command.Parameters.AddWithValue("@age", age);
command.Parameters.AddWithValue("@lastCheckedInTime", lastCheckedInTime);
command.Parameters.AddWithValue("@lastCheckedInBy", lastCheckedInBy);
command.Parameters.AddWithValue("@lastCheckOutTime", lastCheckOutTime);
command.Parameters.AddWithValue("@lastCheckedOutBy", lastCheckedOutBy);
command.Parameters.AddWithValue("@ageGroup", ageGroup);
command.Parameters.AddWithValue("@disciplineNotes", disciplineNotes);
command.Parameters.AddWithValue("@otherNotes", otherNotes);
connection.Open();
command.ExecuteNonQuery();
}
}
catch (SqlException ex)
{
Console.WriteLine(ex.Message);
}
}
得到这个:
System.Data.dll中发生了'System.Data.SqlClient.SqlException'类型的第一次机会异常 参数化查询'(@ childID int,@ firstName nvarchar(4),@ lastName nvarchar(5),@ pare'需要参数 '@lastCheckedInTime',未提供。
有什么想法吗?
答案 0 :(得分:11)
我猜它是null
。不添加null
的参数。它必须是DBNull.Value
。您可以通过向每个参数添加?? DBNull.Value
来执行此操作。愚蠢,我知道:
command.Parameters.AddWithValue("@lastCheckInTime",
lastCheckInTime ?? DBNull.Value);
每个参数;或者之后将其循环,将任何null
修复为DBNull.Value
:
foreach(var param in command.Parameters) {
if(param.Value == null) param.Value = DBNull.Value;
}
作为一个副作用 - 将string
全部视为非常不可能;应该是DateTime
或DateTime?
,不是吗?