Я пытаюсь вставить мои данные в базу данных с помощью хранимой процедуры, но я получаю ошибку.Ошибка при вводе даты в базе данных
Мой код для хранения данных, как это:
public string InsertJobData(JobDTO jobdata)
{
try
{
DbManager.OpenConnection();
DbManager.AddParameter("JobId", jobdata.JobType, StoredProcedureParameterDirection.Input);
DbManager.AddParameter("JobTypeId", jobdata.JobTypeId, StoredProcedureParameterDirection.Input);
if (jobdata.JobRefence != null)
{
DbManager.AddParameter("JobRefence", jobdata.JobRefence, StoredProcedureParameterDirection.Input);
}
else
{
DbManager.AddParameter("JobRefence", DBNull.Value, StoredProcedureParameterDirection.Input);
}
DbManager.AddParameter("JobName", jobdata.JobName, StoredProcedureParameterDirection.Input);
DbManager.AddParameter("CustomerName", jobdata.CustomerName, StoredProcedureParameterDirection.Input);
DbManager.AddParameter("Quantity", jobdata.Quantity, StoredProcedureParameterDirection.Input);
DbManager.AddParameter("JobDescription", jobdata.JobDescription, StoredProcedureParameterDirection.Input);
DbManager.AddParameter("CreatedOn", jobdata.CreatedOn, StoredProcedureParameterDirection.Input);
if (jobdata.CompleteOn != null)
{
DbManager.AddParameter("CompleteOn", jobdata.CompleteOn, StoredProcedureParameterDirection.Input);
}
else
{
DbManager.AddParameter("CompleteOn", DBNull.Value, StoredProcedureParameterDirection.Input);
}
DbManager.AddParameter("Department", jobdata.Department, StoredProcedureParameterDirection.Input);
DbManager.AddParameter("DepartmentId", jobdata.DepartmentId, StoredProcedureParameterDirection.Input);
DbManager.AddParameter("Status", jobdata.Status, StoredProcedureParameterDirection.Input);
if (jobdata.AreaOfPCB != null)
{
DbManager.AddParameter("AreaOfPCB", jobdata.AreaOfPCB, StoredProcedureParameterDirection.Input);
}
else
{
DbManager.AddParameter("AreaOfPCB", DBNull.Value, StoredProcedureParameterDirection.Input);
}
if (jobdata.NumberOfJoints != null)
{
DbManager.AddParameter("NumberOfJoints", jobdata.NumberOfJoints, StoredProcedureParameterDirection.Input);
}
else
{
DbManager.AddParameter("NumberOfJoints", DBNull.Value, StoredProcedureParameterDirection.Input);
}
DbManager.AddParameter("TaskStatus", jobdata.Tasktypeid, StoredProcedureParameterDirection.Input);
DbManager.AddParameter("Id", StoredProcedureParameterDirection.Output);
DbManager.ExecuteNonQuery("spInsertJobData", System.Data.CommandType.StoredProcedure);
jobdata.Id = (int)DbManager.GetParameter("Id");
jobdata.NewJobId = jobdata.JobType + "_" + jobdata.Id;
//dbManager.AddParameter("JobId", jobdata.JobType, StoredProcedureParameterDirection.Input);
//dbManager.ExecuteNonQuery("spUpdateJobByJobId", System.Data.CommandType.StoredProcedure);
}
catch
{
}
finally
{
DbManager.CloseConnection();
}
return jobdata.NewJobId;
}
Мой класс proprty как это:
public int Id { get; set; }
public string JobId { get; set; }
public int JobTypeId { get; set; }
public string JobRefence { get; set; }
public string JobName { get; set; }
public string CustomerName { get; set; }
public int Quantity { get; set; }
public string JobDescription { get; set; }
public DateTime CreatedOn { get; set; }
public DateTime? CompleteOn { get; set; }
public string Department { get; set; }
public int DepartmentId { get; set; }
public bool Status { get; set; }
public string JobType { get; set; }
public string NewJobId { get; set; }
public float? AreaOfPCB { get; set; }
public int? NumberOfJoints { get; set; }
public int? Tasktypeid { get; set; }
Моя хранимая процедура выглядит так:
`
CREATE procedure [dbo].[spInsertJobData]
@JobId nvarchar(50),
@JobTypeId int,
@JobRefence nvarchar(50),
@JobName nvarchar(50),
@CustomerName nvarchar(50),
@Quantity bigint,
@JobDescription nvarchar(MAX),
@CreatedOn datetime,
@CompleteOn datetime,
@Department nvarchar(50),
@DepartmentId int,
@Status bit,
@AreaOfPCB int,
@NumberOfJoints bigint,
@TaskStatus int,
@Id int OUTPUT
As
BEGIN
INSERT INTO oms.JobId_Table (JobId,JobTypeId,JobRefence,JobName,CustomerName,Quantity,JobDescription,CreatedOn,CompleteOn,Department,DepartmentId,Status,AreaOfPCB,NumberOfJoints,TaskStatus)
VALUES (@JobId,@JobTypeId,@JobRefence,@JobName,@CustomerName,@Quantity,@JobDescription,@CreatedOn,@CompleteOn,@Department,@DepartmentId,@Status,@AreaOfPCB,@NumberOfJoints,@TaskStatus)
UPDATE oms.JobId_Table
SET JobId = 'oms.' + Convert(varchar,@JobId) +'_'+ Convert(varchar,oms.JobId_Table.Id)
WHERE JobId = @JobId
SET @Id = SCOPE_IDENTITY()
RETURN @Id
END`
Когда я выполняю код , это исключает следующее:
Помогите пожалуйста. Спасибо заранее.
Подробнее об исключении: `
System.Data.SqlClient.SqlException was caught
HResult=-2146232060
Message=Error converting data type nvarchar to datetime.
Source=.Net SqlClient Data Provider
ErrorCode=-2146232060
Class=16
LineNumber=0
Number=8114
Procedure=spInsertJobData
Server=JITENDERSINGH\JITENDER
State=5
StackTrace:
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at Company.Project.Entities.Entities.DatabaseHelper.ExecuteNonQuery(String query, CommandType commandtype, DatabaseConnectionState connectionstate) in e:\SGS_MVC_APP\SGS_PROJECT\Company.Project.Entities\Entities\DBHelper.cs:line 258
at Company.Project.Entities.Entities.DatabaseHelper.ExecuteNonQuery(String query, CommandType commandtype) in e:\SGS_MVC_APP\SGS_PROJECT\Company.Project.Entities\Entities\DBHelper.cs:line 221
at Company.Project.Entities.Entities.DBManager.ExecuteNonQuery(String query, CommandType commandtype) in e:\SGS_MVC_APP\SGS_PROJECT\Company.Project.Entities\Entities\DBManagerBase.cs:line 131
at Company.Project.DataAccess.BiddingFirstStepDAC.InsertJobData(JobDTO jobdata) in e:\SGS_MVC_APP\SGS_PROJECT\Company.Project.DataAccess\BiddingFirstStepDAC.cs:line 163
InnerException:
`
Вы можете разместить детали исключения? –
Можете ли вы проверить, являются ли какие-либо другие значения, такие как 'JobId' и т. Д.' Null '?Это может вызвать различные проблемы, так как они не настраиваются на 'DbNull.Value' –
Примечание:' SET @Id = SCOPE_IDENTITY() 'должно идеально ** немедленно ** следовать за' INSERT'. Это не вызовет этой проблемы. –