문제 : C#의 Oledb 인터페이스를 사용하여 액세스 데이터베이스에 날짜 시간을 삽입하려고합니다.Access에 DateTime을 삽입하십시오.
해킹 솔루션 : 나는 문제없이 데이터베이스에 텍스트를 삽입 할 수 있습니다 command.Properties
를 사용하지 않고 내 삽입에 문자열을 생성하지만 날짜를하려고 할 때이 오류로 끝날 : System.Data.OleDb를. OleDbException { "조건 식의 데이터 형식이 일치하지 않습니다."}
몇 가지 게시물이 유사하지만 작동하지 않는 것이 있습니다. 내가 생각할 수있는 날짜 시간의 모든 순열을 시도, 지역 표시된 테스트 코드 내부
void TransferData()
{
string instCmd = Get_InsertCommand(0); // hard coded table 0 for testing
Fill_ProductTable_ToInsert();
con.Open();
// It would be nice not to have to separate the date indexes
int[] textIndex = { 0, 1, 2, 3, 4, 7 };
int[] dateIndex = { 5, 6 };
try
{
foreach (DataRow row in DataToStore.Tables[0].Rows)
{
OleDbCommand command = new OleDbCommand();
command.Connection = con;
command.CommandText = instCmd;
foreach(int j in textIndex)
command.Parameters.AddWithValue("@" + j, row[j]);
foreach (int j in dateIndex)
{
// TESTING CODE
///////////////////////////////////////////////////////////////////////////
string input = "#\'" +DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") +"\'#";
command.Parameters.AddWithValue("@" + j, input.ToString());
Program.WriteLine(input.ToString());
///////////////////////////////////////////////////////////////////////////
}
command.ExecuteNonQuery();
}
}
finally
{
con.Close();
}
}
string Get_InsertCommand(int i)
{
string sqlIns = "INSERT INTO " + DataToStore.Tables[0].TableName + " (";
string temp = "VALUES (";
for (int j = 0; j < expected_header[i].Length - 1; j++)
{
sqlIns += expected_header[i][j] + ", ";
temp += "@" + j + ", ";
}
int lastIndex = expected_header[i].Length -1;
sqlIns += expected_header[i][lastIndex] + ") ";
temp += "@" + lastIndex + ")";
sqlIns += temp;
return sqlIns;
}
:
여기 내 코드입니다. 나는 모든 형식을 # 및 ' yyyy-MM-dd, yyyyMMdd, yyyy/MM/dd, yyyy/MM/dd 시도했다 또한 ToOADate() 시도한 및 ToString(), ToShortDateString()
나는 또한 내가 아이디어의 부족 해요 ANSI SQL-92을 허용하도록 데이터베이스를 설정했습니다. 이 코드는 루프를 마음, 여러 데이터베이스에서 여러 테이블을 처리하도록 설정되어 ... 제대로
OtimeTime.Now, DateTime.Now.Date 등의 다양한 날짜/시간 입력과 함께 OleDbType.Date 및 OleDbType.DBDate를 사용하여 같은 오류가 발생합니다. new DateTime (2012,2,3), 모두 같은 끝입니다. – user1642357
실행하기 전에 생성 한 SQL 문을 콘솔에 인쇄하고 올바른지 확인하십시오. –
OleDbCommand 개체에서 전체 명령을 인쇄하려면 어떻게합니까? 명령 형식이 정확하고 문자열 값에 대해 작동하며 데이터베이스의 필드를 문자열로 전환하면 필드에 날짜를 배치 할 수 있지만 실제 날짜로 날짜를 넣을 수 있습니다. – user1642357