【问题标题】:ORA-01008 error-Inserting a record into Oracle DB using OleDbORA-01008 错误 - 使用 OleDb 将记录插入 Oracle DB
【发布时间】: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();

【问题讨论】:

    标签: c# oracle visual-studio-2010


    【解决方案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 不客气。对于您的第二个问题,我想不出任何信息。如果您还有其他问题,也应该将其作为单独的问题提出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 2023-03-28
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多