2017-05-20 12 views
0

내가 오류 유형 'System.Data.OleDb.OleDbException'처리되지 않은 예외가 system.data.dll없음 값은 모든 매개 변수가 지정되지 않은 경우

추가 정보 발생 입니다 : 하나 이상의 필수 매개 변수에 대해 지정된 값이 없습니다.

는하지만이 경우 모든 매개 변수를 넣고 선물 코드 :

private OleDbDataReader dbReader;// Data Reader object 
    string sConnection = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=ICTSchool.accdb"; 
    string sql; 
    OleDbConnection dbConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=ICTSchool.accdb"); 
    OleDbCommand dbCommand; 

public class ComboboxItem 
    { 
     public string Text { get; set; } 
     public object Value { get; set; } 

     public override string ToString() 
     { 
      return Text; 
     } 
    } 

private void bAdd_Click(object sender, EventArgs e) 
    { 
     { 
      dbConn = new OleDbConnection(sConnection); 

      dbConn.ConnectionString = sConnection; 


      dbConn.Open(); 
      string code = (cBQualification.SelectedItem as ComboboxItem).Value.ToString(); 
      string sqlinsert = "INSERT INTO Student VALUES (" + tBStudentNum.Text + "," + tBStudentName.Text+","+ tBCellNo.Text+","+ code + ")"; 
      Console.WriteLine("Test 'sqlinsert' "+ sqlinsert); 

      dbCommand = new OleDbCommand(sqlinsert, dbConn); 

      dbCommand.ExecuteNonQuery(); 
     } 
    } 
+0

학생 표는 어떤 모양입니까? 테이블에 네 개의 null이 아닌 필드 만있는 경우 앱의 TextBox 중 하나 이상이 비어 ​​있지 않습니까? 마지막으로 텍스트 필드는 작은 따옴표 안에 있어야합니다. –

답변

0

여기에 MS Access에서 값을 삽입하는 방법에 대한 기사의 일부입니다. 테이블에 레코드 하나를 추가하려면 필드 목록을 사용하여 데이터를 저장할 필드를 정의한 다음 데이터 자체를 값 목록에 제공해야합니다. 값 목록을 정의하려면 VALUES 절을 사용하십시오.

예를 들어, 다음 문은 각각 CustomerID, Last Name 및 First Name 필드에 "1", "Kelly"및 "Jill"값을 삽입합니다. tblCustomers INTO

INSERT (CustomerID를, [성], [이름]) VALUES (1, '켈리', '질') 당신은 필드 목록을 생략 할 수 있습니다

하지만, 기록에 포함될 수있는 모든 값을 제공 할 경우에만 tblCustomers 값으로

INSERT (1 켈리 '질', '555-1040' '[email protected]')

소스 MSDN How to: Insert, Update, and Delete Records From a Table Using Access SQL

0

수의 관찰; 1) SQL에 매개 변수를 지정하지 않았으므로 Student 테이블에 4 개의 필드 만 있다고 가정 할 수 있습니다. 2) 명명 된 매개 변수를 사용하고 있지 않습니다. 일반적으로 좋지 않습니다. 3) 연결된 값과 SQL을 사용하고 있습니다. 이로 인해 SQL Injection 공격에 취약 해집니다. 4) 텍스트 상자에 쉼표 또는 SQL 오류로 이어지는 다른 SQL 형식 문자가 포함될 수 있습니다.

0

잘못된 SQL 문이 원인 일 수 있습니다. 문자열 값 (NVARCHAR, VARCHAR가) 당신이 다음 문장으로 지금하고있는 방법없는 생각 작은 따옴표로 묶어야한다

string sqlinsert = "INSERT INTO Student VALUES (" + tBStudentNum.Text + "," + tBStudentName.Text+","+ tBCellNo.Text+","+ code + ")"; 

나 '
string sqlinsert = $"INSERT INTO Student VALUES ({tBStudentNum.Text}, '{tBStudentName.Text}', {tBCellNo.Text}, '{code}')"; 

에 SQL 문을 변경해보십시오 위의 경우 tBStudentNum.Text와 tBCellNo.Text는 숫자 값이라는 가정을했습니다. 그렇지 않은 경우 적절한 값을 변경하여 값을 작은 따옴표 안에 넣을 수 있습니다.

.net/C#의 하위 버전을 사용하는 경우 $ 표현식을 string.format 함수로 바꿉니다.