2014-11-22 5 views
0

WinForms 프로젝트에서 C#과 Oracle을 사용하고 있습니다. 나는 오류를 받고 있어요 :OracleParameterCollection.Add (문자열, 유형, 문자열, 크기, 문자열)

ORA-01400 cannot insert null into (string) when using "InsertCommand.Parameters.Add".

문제는 매개 변수 (":ID", ":NOME", ":OBSERVACAO", ":NUMERO", ":ENDERECO")는 "srcColumn"의 값을받지 않는 방법 "추가"의 ("ID", "NOME", "OBSERVACAO", "NUMERO", "ENDERECO") 인수입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

public Form1() 
    { 
     InitializeComponent(); 
     ConsultaGRID(); 
    } 

    OracleConnection conn = new OracleConnection("Data Source=xxx; User ID=xxx; Password=xxx;"); 
    DataTable tabela = new DataTable(); 
    OracleDataAdapter da = new OracleDataAdapter(); 

    private void ConsultaGRID() 
    { 
     while (conn.State != ConnectionState.Open) { conn.Open(); } 
     OracleCommand cmd = new OracleCommand("select ID, NOME, OBSERVACAO, NUMERO, ENDERECO from CADASTRO_FONES order by ID", conn); 

     da = new OracleDataAdapter(cmd); 
     da.Fill(tabela); 

     dataGridView1.DataSource = tabela; 

    } 

    private void dataGridView1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 
    { 
     if (e.KeyCode == Keys.F6)//Inserir 
     { 
      GetInsert(); 
     } 
     else if (e.KeyCode == Keys.F10)//Salvar 
     { 
      GetSave(); 
     } 
    } 

    private void GetInsert() 
    { 
     tabela.Rows.Add(); 
     dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.RowCount - 1].Cells[0]; 
    } 

    private void GetSave() 
    { 
     try 
     { 
      while (conn.State != ConnectionState.Open) { conn.Open(); }     
      da.InsertCommand = new OracleCommand("insert into CADASTRO_FONES (NOME, ID, OBSERVACAO, NUMERO, ENDERECO) values (:NOME ,:ID ,:OBSERVACAO ,:NUMERO ,:ENDERECO)", conn);     

      da.InsertCommand.Parameters.Add(":ID", OracleType.Number, 22, "ID"); 
      da.InsertCommand.Parameters.Add(":NOME", OracleType.VarChar, 70, "NOME"); 
      da.InsertCommand.Parameters.Add(":OBSERVACAO", OracleType.VarChar, 70, "OBSERVACAO"); 
      da.InsertCommand.Parameters.Add(":NUMERO", OracleType.VarChar, 20, "NUMERO"); 
      da.InsertCommand.Parameters.Add(":ENDERECO", OracleType.VarChar, 70, "ENDERECO"); 

      da.Update(tabela); 
     } 
     catch (Exception ex) { MessageBox.Show(ex.Message); } 
     finally 
     { 
      conn.Close(); 
     } 
    } 

는 여전히 작동하지 않는 다음과 코드에 "GetSave()"기능을 변경 :

당신은 Parameters.Add에 콜론을 제거 할 필요가
private void GetSave() 
    { 
     try 
     { 
      while (conn.State != ConnectionState.Open) { conn.Open(); }     
      OracleCommand cmd = new OracleCommand("insert into CADASTRO_FONES (NOME, ID, OBSERVACAO, NUMERO, ENDERECO) values (:NOME ,:ID ,:OBSERVACAO ,:NUMERO ,:ENDERECO)", conn);     

      da.InsertCommand.Parameters.Add("ID", OracleType.Number, 22, "ID"); 
      da.InsertCommand.Parameters.Add("NOME", OracleType.VarChar, 70, "NOME"); 
      da.InsertCommand.Parameters.Add("OBSERVACAO", OracleType.VarChar, 70, "OBSERVACAO"); 
      da.InsertCommand.Parameters.Add("NUMERO", OracleType.VarChar, 20, "NUMERO"); 
      da.InsertCommand.Parameters.Add("ENDERECO", OracleType.VarChar, 70, "ENDERECO"); 

      da.InsertCommand = cmd; 

      da.Update(tabela); 
     } 
     catch (Exception ex) { MessageBox.Show(ex.Message); } 
     finally 
     { 
      conn.Close(); 
     } 
    } 

답변

0

:

da.InsertCommand.Parameters.Add(":ID", OracleType.Number, 22, "ID"); 

da.InsertCommand.Parameters.Add("ID", OracleType.Number, 22, "ID"); 

을해야한다 콜론은 실제 SQL 문자열에서 바인드 매개 변수를 나타내는 데 사용됩니다. 매개 변수를 만들 때 콜론없이 이름 만 지정하십시오.

예를 참조하십시오. here

+0

OldProgrammer, 답변 주셔서 감사합니다. 그래도 작동하지 않습니다. – BetaTester