2014-12-22 2 views
1

DateTime 형식 매개 변수가있는 SQL 명령이있는 SQL Server 용 ADO.NET을 사용하여 레코드를 삭제하려고합니다. ADO.NET DateTime sql 매개 변수의 정확도가 손실됩니다.

using (var sqlConnection = new SqlConnection(...)) 
{ 
    var command = sqlConnection.CreateCommand(); 
    command.CommandText = string.Format("DELETE FROM [{0}] WHERE [email protected]", ...); 
    command.Parameters.Add(new SqlParameter("@UtcTimeStamp", DbType.DateTime2) { Value = exactTime }); 
    sqlConnection.Open(); 
    command.ExecuteNonQuery(); 
} 

내가 예를 2014-12-22 04:53:21.9690398exactTime을 통과

한편 나는 데이터베이스,이 UtcTimeStamp 값이 존재와 기록을 확인,하지만 난 내 코드를 실행 한 후 기록은 삭제되지 않습니다.

나는 SQL Profier에서 UtcTimeStamp 매개 변수가 2014-12-22 04:53:21.970으로 구문 분석 된 것으로 확인 되었기 때문에 내 코드가 작동하지 않는 것으로 생각됩니다.

그래서 어떻게 구문 분석을 강제로 정확히 입력과 정확하게 일치시킬 수 있습니까? 이 유형은 DbType.DateTime으로 당신이 그것을 저장하는 데이터베이스에이를 저장할 때 그래서 내가 생각 이 있는지 확인하십시오 (100)의 정확도로 나노초의 값을 반올림 때문에 그 형태가 DbType.DateTime2입니다 데시벨이 vlaue을 저장할 때

+1

ID와 같은 기본 키를 기반으로 레코드를 삭제하는 것이 좋습니다. 'Datetime'은 결코 레코드 삭제에 사용되지 않습니다. 데이터 필터 (보고서)의 경우에만 사용됩니다. –

+0

@DimitarDimitrov 감사합니다,하지만 그것은 'Decimal' 유형에 사용됩니다. –

+0

@DimitarDimitrov 흥미롭게도이 문서를 계속 보았습니다 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.scale(v=vs.110).aspx, 어쨌든 'Scale'을 시도했지만, 작동하지 않습니다. –

답변

1

, 나는 내가 점을 발견했다 생각 : 나는 그것을로 DbType를 전달하는 경우가

new SqlParameter("@UtcTimeStamp", SqlDbType.DateTime2) { Value = exactTime } 

이어야의 SqlParameter의 두 번째 인수가 올바르지 않습니다, 그것은 그것에 의해 식별됩니다 다른 생성자입니다 :

public SqlParameter(string parameterName, object value) : this() 
{ 
    this.ParameterName = parameterName; 
    this.Value = value; 
} 

그래서이 인스턴스의 SqlDbType 속성이 정확하지 않은 기본 SqlDbType.DateTime를 사용합니다. 대신이 생성자를 사용해야합니다.

public SqlParameter(string parameterName, SqlDbType dbType) : this() 
{ 
    this.ParameterName = parameterName; 
    this.SqlDbType = dbType; 
} 
0

것은 확인 DbType.DateTime2입니다. 좋아