ORA-01008 错误 - 使用 OleDb 将记录插入 Oracle DB

Posted

技术标签:

【中文标题】ORA-01008 错误 - 使用 OleDb 将记录插入 Oracle DB【英文标题】:ORA-01008 error-Inserting a record into Oracle DB using OleDb 【发布时间】:2014-10-15 06:49:04 【问题描述】:

该代码涉及使用 C# 将 VS 2010 中输入的值中的记录插入到 Oracle DB 中。数据库已在 sqlplus 中创建,在 VS 中调试时遇到错误-ORA 01008。语法与默认语法匹配一。谁能指出错误。

OleDbConnection con = new OleDbConnection();
con.ConnectionString = "Provider="provider";Data Source=xxxx;User ID=usernamePassword=password";

con.Open();

string insertquery = "insert into CHECKLIST(ID,CUSTOMER,SERVER,CHECK_TYPE,DESCRIPTION,PATH_URL,TEXT,CAT3,CAT4) Values (:id,:customer,:server,:check1,:description,:path1,:text1,:cat3,:cat4)";

OleDbCommand cmd = new OleDbCommand(insertquery, con);
OleDbDataAdapter adapter = new OleDbDataAdapter(insertquery, con);

cmd.Parameters.Add(new OleDbParameter(":id", TextBox9.Text));
cmd.Parameters.Add(new OleDbParameter(":customer", TextBox1.Text));
cmd.Parameters.Add(new OleDbParameter(":server", TextBox2.Text));
cmd.Parameters.Add(new OleDbParameter(":check1", TextBox3.Text));
cmd.Parameters.Add(new OleDbParameter(":description", TextBox4.Text));
cmd.Parameters.Add(new OleDbParameter(":path1", TextBox5.Text));
cmd.Parameters.Add(new OleDbParameter(":text1", TextBox6.Text));
cmd.Parameters.Add(new OleDbParameter(":cat3", TextBox7.Text));
cmd.Parameters.Add(new OleDbParameter(":cat4", TextBox8.Text));

cmd.ExecuteNonQuery();

Response.Write("Registration is successful");

con.Close();

【问题讨论】:

【参考方案1】:

来自OleDbCommand.Parameters property

OLE DB .NET 提供程序不支持传递命名参数 SQL 语句或存储过程的参数 当 CommandType 设置为 Text 时的 OleDbCommand。在这种情况下, 必须使用问号 (?) 占位符。例如:

SELECT * FROM Customers WHERE CustomerID = ?

因此,OleDbParameter 对象添加到 OleDbParameterCollection 必须直接对应的位置 命令文本中参数的问号占位符。

尝试使用? 指定您的参数。

string insertquery = @"insert into CHECKLIST(ID,CUSTOMER,SERVER,CHECK_TYPE,DESCRIPTION,PATH_URL,TEXT,CAT3,CAT4)
                     Values(?,?,?,?,?,?,?,?,?)";

您的OleDbDataAdapter 似乎也毫无意义。你只是插入一个数据。您不会返回任何数据以保留在 OleDbDataAdapter 中。

也可以使用using statement来处理你的OleDbConnectionOleDbCommandlike;

using(OleDbConnection con = new OleDbConnection(conString))
using(OleDbCommand cmd = con.CreateCommand())

    // Set your CommandText property.
    // Define and add your parameter values.
    // Open your OleDbConnection.
    // Execute your query with ExecuteNonQuery.

【讨论】:

感谢您的回答。虽然该错误已解决。但是在调试时遇到错误说:MSDAORA' failed with no error message available, result code: E_FAIL(0x80004005) type of error..how to纠正这个错误 @KaashyapSarma 不客气。对于您的第二个问题,我想不出任何信息。如果您还有其他问题,也应该将其作为单独的问题提出。

以上是关于ORA-01008 错误 - 使用 OleDb 将记录插入 Oracle DB的主要内容,如果未能解决你的问题,请参考以下文章

Oracle“ORA-01008:并非所有变量都绑定”错误带参数

cx_ORACLE 传递参数 ORA-01008 错误

ORA-01008: 并非所有变量都已绑定

ORA-01008: 并非所有变量都已绑定

java.sql.SQLException: ORA-01008: 并非所有变量都使用 Mybatis 3 绑定

将参数传递给 callableSatament - ORA-01008: 并非所有变量都绑定