2015-01-28 2 views
0

내 코드가 Access 데이터베이스에 일부 데이터를 삽입하는 중입니다. 했다가 실패 코드 (코드 다운로드 전자 메일에 대한 라이브러리를 사용하지만 오류가 분명히 그와 관련이 없습니다)이다 :C에서 MS Access에서 행 삽입 #

foreach (MimeData mime in email.Attachments) 
{ 

    string name = NumEmail + mime.SafeFileName; 
    string path = (@"\\pathrandom" + name); 
    mime.Save(path); 
    long length = new System.IO.FileInfo(path).Length; 

    String my_querry2 = "INSERT INTO Table(id, field1, field2, field3, field4)VALUES('" + path + "','" + length + "','" + name+ "','" + value3 + "','" + date + "')"; 
    MessageBox.Show(my_querry2); 
    OleDbCommand cmd2 = new OleDbCommand(my_querry, conn); 
    cmd.ExecuteNonQuery();      
} 

(ID, 날짜 및 VALUE3 함께 foreach 문에서 정의 된 변수 foo 문자열, 오늘 날짜 및 foo 문자열).

이 코드를 실행하면 삽입이 발생하지 않고 ExecutedNonQuery()이 오류를 반환합니다. 중복 된 값을 생성하기 때문에 쿼리가 실행되지 않는다고합니다. 그러나 테이블은 완전히 비어 있으므로 'id'는 반복 될 수 없습니다. 나는 접근과 그 일을 쿼리를하려고 노력 :

INSERT INTO AchivosAdjuntos(id, field1, field2, field3, field4)VALUES('\\path','171','x.png','random','28/01/2015')

을 그리고 값을 삽입 (값이 C#을 삽입하려고하는 동일) 완벽하게 작동합니다.

DB와 연결이 잘된 것 같습니다. 삽입하기 전에 잘 수행 한 다른 작업을했기 때문입니다.

그래서 ... 내가 뭘 잘못하고있어? : S

+0

당신은 SQL 주입을 벌리고 자신을 떠나 같은 SQL 문을 구축하는 문자열 연결을 사용하지 마십시오. 매개 변수를 대신 사용하십시오. – Matt

+0

중복 된 키에 대해 불평합니다. 따라서 동일한 기본 키 또는 필드 값 조합과 테이블의 고유 인덱스 정의가 충돌하는 두 개의 레코드를 삽입하려고합니다. 테이블의 인덱스와 기본 키가 무엇인지 확인 – Steve

+0

내가 말한 것처럼 키가있는 유일한 필드는 'id'이고 테이블은 완전히 비어 있으므로 실제로 문제가 될 수 없습니다. 또한 sql 이후 동일한 데이터를 삽입 할 수 있으므로 중복 문제는 실제로 생각할 수 없습니다. 매트가 말한 것을 시도하고 매개 변수로 해보겠습니다. – Nimrrod

답변

1

를 사용하여 매개 변수

 string my_querry2 = "INSERT INTO Table(id, field1, field2, field3, field4)VALUES(@paramPath,@paramLength,@paramName,@paramValue3,@paramDate)"; 
     OleDbCommand cmd2 = new OleDbCommand(my_querry2, conn); 
     cmd2.Parameters.Add(new OleDbParameter("@paramPath", path)); 
     cmd2.Parameters.Add(new OleDbParameter("@paramLength", length)); 
     cmd2.Parameters.Add(new OleDbParameter("@paramName", name)); 
     cmd2.Parameters.Add(new OleDbParameter("@paramValue3", value3)); 
     cmd2.Parameters.Add(new OleDbParameter("@paramDate", date)); 
     cmd2.ExecuteNonQuery(); 
+0

이유를 모르지만 매개 변수가 작동했습니다. 너와 매트, 그리고 그것을 말한 다른 사람들에게 감사 : P – Nimrrod