【发布时间】:2014-11-22 16:44:52
【问题描述】:
我在 WinForms 项目中使用 C# 和 Oracle。我收到错误:
使用“InsertCommand.Parameters.Add”时,ORA-01400 无法将 null 插入(字符串)。
问题是参数(":ID", ":NOME", ":OBSERVACAO", ":NUMERO", ":ENDERECO") 没有从方法“Add”的“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()”函数更改为下面的代码,但仍然无法正常工作:
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();
}
}
【问题讨论】:
标签: c# oracle parameters sql-insert