C# OLE DB ORA-01008:并非所有变量都已绑定(但它们已绑定)
我正在尝试与一个运行非常旧版本的Oracle(8)的应用程序交谈。我需要先进行查询以获取最新的id,然后使用此id插入。不幸的是,我在执行时出错。我已经在网上搜索过了,但是我找不到任何人使用这种查询,所以如果有任何帮助,我将不胜感激C# OLE DB ORA-01008:并非所有变量都已绑定(但它们已绑定),c#,oledb,C#,Oledb,我正在尝试与一个运行非常旧版本的Oracle(8)的应用程序交谈。我需要先进行查询以获取最新的id,然后使用此id插入。不幸的是,我在执行时出错。我已经在网上搜索过了,但是我找不到任何人使用这种查询,所以如果有任何帮助,我将不胜感激 private static OleDbConnection GetConn() { return new OleDbConnection() { ConnectionString = ConfigurationManager.ConnectionStrin
private static OleDbConnection GetConn()
{
return new OleDbConnection()
{
ConnectionString = ConfigurationManager.ConnectionStrings["conn"].ConnectionString
};
}
public bool AddModel(Model model)
{
OleDbConnection conn = GetConn();
conn.Open();
StringBuilder sb = new StringBuilder();
sb.Append("DECLARE max_id INTEGER; ");
sb.Append("BEGIN ");
sb.Append("SELECT MAX(SORTID) into max_id FROM QRY.TABLE where status = 'A'; ");
sb.Append("max_id := max_id + 1; ");
sb.Append("INSERT INTO QRY.TABLE (COL1,COL2,COL3,COL4,COL5,COL6,COL7,SORTID) VALUES(? ,? ,? ,? ,? ,? ,? ,max_id);");
sb.Append("END;");
using (OleDbCommand command = new OleDbCommand(sb.ToString(), conn))
{
command.Parameters.AddWithValue("COL1", model.ID);
command.Parameters.AddWithValue("COL2", model.Description);
command.Parameters.AddWithValue("COL3", model.Perc);
command.Parameters.AddWithValue("COL4", model.Amount);
command.Parameters.AddWithValue("COL5", model.Status);
command.Parameters.AddWithValue("COL6", model.UpdatedUser);
command.Parameters.Add("COL7", OleDbType.Date).Value = DateTime.Now;
command.ExecuteNonQuery();
}
}
注意,我必须重新格式化本文中的代码,以删除对实际表的任何引用,这样它可能会放入一些typeo。真正的代码是编译和运行的。您可以修改
sb.Append("INSERT INTO QRY.TABLE (COL1,COL2,COL3,COL4,COL5,COL6,COL7,SORTID) VALUES(@COL1,@COL2,@COL3,@COL4,@COL5,@COL6,@COL7,max_id);");
并对其进行修改
command.Parameters.AddWithValue("@COL1", model.ID);
command.Parameters.AddWithValue("@COL2", model.Description);
command.Parameters.AddWithValue("@COL3", model.Perc);
command.Parameters.AddWithValue("@COL4", model.Amount);
command.Parameters.AddWithValue("@COL5", model.Status);
command.Parameters.AddWithValue("@COL6", model.UpdatedUser);
command.Parameters.Add("@COL7", OleDbType.Date).Value = DateTime.Now;
您可以修改
sb.Append("INSERT INTO QRY.TABLE (COL1,COL2,COL3,COL4,COL5,COL6,COL7,SORTID) VALUES(@COL1,@COL2,@COL3,@COL4,@COL5,@COL6,@COL7,max_id);");
并对其进行修改
command.Parameters.AddWithValue("@COL1", model.ID);
command.Parameters.AddWithValue("@COL2", model.Description);
command.Parameters.AddWithValue("@COL3", model.Perc);
command.Parameters.AddWithValue("@COL4", model.Amount);
command.Parameters.AddWithValue("@COL5", model.Status);
command.Parameters.AddWithValue("@COL6", model.UpdatedUser);
command.Parameters.Add("@COL7", OleDbType.Date).Value = DateTime.Now;
我觉得它很好,所以你确定你传递了正确的数据类型,并且没有空值引起问题吗?我觉得它也很好,不幸的是它不起作用。没有空值,我已经努力编码了这些值。insert语句在我自己运行时起作用。我猜OLEDB不能做这种类型的查询。Oracel不是我的强项,但从我所看到的()来看,在插入状态中,max_id前面需要一个:。我没有Oracel box来测试它,所以请让我知道它是如何运行的。我尝试添加:before maxid仍然存在非所有变量绑定错误。对我来说它看起来很好,所以你确定你传递了正确的数据类型并且没有空值导致问题吗?对我来说它看起来也很正确,不幸它不起作用。没有空值,我已经努力编码了这些值。insert语句在我自己运行时起作用。我猜OLEDB不能做这种类型的查询。Oracel不是我的强项,但从我所看到的()来看,在插入状态中,max_id前面需要一个:。我没有Oracel box来测试它,所以请让我知道它是如何运行的。我尝试添加了:before maxid仍然得到了not all variables bound错误。谢谢,但这实际上并没有回答我的问题。对于Oracle的OleDb provider,它也根本不起作用。bind变量应该是一个问号“?”。您可以阅读本文示例:或者更新的版本where?使用@Cookie是的,它可能有不同的版本,但这实际上并不能回答我的问题。它也根本不适用于Oracle的OleDb提供程序。bind变量应该是一个问号“?”。您可以阅读本文示例:或者更新的版本where?是否使用@Cookie是的,可能是不同的版本