我用这个在网上到处都是,我很惊讶我似乎找不到任何方法来做我正在寻找的东西。
我Oracle.DataAccess.Client
在我的 C# 项目中使用该库,而不是已弃用的库System.Data.OracleClient.
我有一个非常简单的表:
CREATE TABLE testing (
ID NUMBER(10),
COMMENTS CLOB,
DATECREATED DATE DEFAULT (SYSDATE) NOT NULL,
DATEMODIFIED DATE
);
INSERT INTO testing (ID, COMMENTS) VALUES(1, 'this is a test');
以上显然工作得很好。问题是,这是一个评论字段,它将被更改。在我的 C# 程序中,我希望允许用户保存评论。对于这个例子,我删除了任何复杂的东西。
我在表单上有一个按钮和一个名为“评论”的文本框。
using (OracleConnection connection = new OracleConnection(<VALID CONN STRING GOES HERE>)) {
connection.Open();
using (OracleCommand command = new OracleCommand()) {
command.Connection = connection;
command.CommandText = "UPDATE testing SET COMMENTS = :COMMENTS, DATEMODIFIED = sysdate WHERE ID = :ID";
command.CommandType = CommandType.Text;
command.Parameters.Add("ID", OracleDbType.Int32, ParameterDirection.Input).Value = 1;
command.Parameters.Add("COMMENTS", OracleDbType.Clob, ParameterDirection.Input).Value = comments.Text;
command.ExecuteNonQuery();
}
}
所以基本上只要我不尝试编写 Clob,这段代码就可以工作。如果我保存修改的日期,则按预期创建。但是,当我使用 Clob 保存时,什么也没有发生。oracle没有错误消息,没有异常,什么都没有。
如果我放弃参数化并以错误的方式进行:
command.CommandText = "UPDATE testing SET COMMENTS = " + comments.Text + ", DATEMODIFIED = sysdate";
没有问题。似乎参数化是这里的问题。