我似乎无法在其他问题中找到正确答案。
我正在使用这段代码来指定应该保存在数据库中的日期。
request.BranchRequestDate = DateTime.Now;
当我尝试使用此功能从表中检索数据时。
public Request SelectByID()
{
try
{
SqlCommand command = this.GetParametizedCommand("SELECT * FROM Request WHERE RequestUID = '" + this.RequestUID.ToString() + "' ;");
command.CommandType = CommandType.Text;
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataTable tbl = new DataTable();
adapter.Fill(tbl); //This is where the exception is thrown
return ToEntity(tbl);
}
catch
{
return null;
}
}
......抛出异常。
我已经尝试过检查所有内容,但是我无法弄清楚它为什么抛出异常,因为我无法看到C#中检索到的数据是什么样的,但我在SQL Server中尝试了这个语句本身并返回正确的数据。
有什么想法吗?
编辑:我也将它与同一程序中的类似功能进行了比较,它运行得很好。
编辑: GetParametizedCommand方法的代码
public SqlCommand GetParametizedCommand(String commandText)
{
try
{
SqlCommand command = base.GetSqlCommand(commandText);
if(SavingStatus == Util.SavingStatus.INSERT)
command.Parameters.Add(new SqlParameter("@RequestUID", SqlDbType.Int,32, ParameterDirection.Output, false, 38, 38, "RequestUID", DataRowVersion.Default, this.RequestUID));
else if (SavingStatus == Util.SavingStatus.UPDATE || SavingStatus == Util.SavingStatus.DELETE)
command.Parameters.Add(new SqlParameter("@RequestUID", SqlDbType.Int,32, ParameterDirection.Input, false, 38, 38, "RequestUID", DataRowVersion.Default, this.RequestUID));
command.Parameters.AddWithValue("@DisplayID", this.DisplayID);
command.Parameters.AddWithValue("@BranchUID", this.BranchUID);
command.Parameters.AddWithValue("@EmployeeUID", this.EmployeeUID);
command.Parameters.AddWithValue("@BranchRequestDate", this.BranchRequestDate);
command.Parameters.AddWithValue("@IsDeleted", this.IsDeleted);
return command;
}
catch
{
return null;
}
}
答案 0 :(得分:7)
可能发生异常,因为当您使用SELECT语句调用this.BranchRequestDate
时,GetParametizedCommand
尚未初始化。
由于this.BranchRequestDate
尚未初始化,因此它等于DateTime.MinValue
,这不是有效的SQL日期时间值。
您可以为DateTime.MinValue
添加显式检查,并避免在该情况下添加参数:
if (this.BranchRequestDate != DateTime.MinValue)
command.Parameters.AddWithValue("@BranchRequestDate", this.BranchRequestDate);
或者您可以创建一个GetCommand
方法,该方法根本不为SELECT语句添加任何参数。