- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下函数抛出 System.InvalidOperationException
:
internal void executeNonQuery(string connectionString, OracleCommand cmd)
{
using (OracleConnection conn = new OracleConnection(connectionString))
{
using (cmd)
{
conn.Open();
cmd.ExecuteNonQuery(); //here is the error
conn.Close();
}
}
}
附加信息是:
Operation is not valid due to the current state of the object.
我尝试在表格中插入一行。是否有其他方法可以执行此操作或修复此错误?
编辑:我使用以下方法在 binaryManager 类中构建查询:
internal object[] binaryInsert(string tblName, string tblQuery, int conStrgID, int cq)
{
object[] retValues = new object[3];
Stream myStream = null ;
OracleConnection con = null;
string conString = qm.getConnectionString("ConnectionStringToMyDB"); //is correct
byte[] data = GetBytes(tblQuery);
String sql = "INSERT INTO MYTABLES VALUES (NULL, '" + tblName + "', ':tblQueryBlob', " + conStrgID + ", " + cq + ")";
OracleCommand cmd = new OracleCommand();
cmd.CommandText = sql; // Set the sql-command
cmd.Connection = con; //con is an OracleConnection
OracleParameter param = cmd.Parameters.Add("tblQueryBlob", OracleDbType.Blob); //Add the parameter for the blobcolumn
param.Direction = ParameterDirection.Input;
param.Value = data; //Asign the Byte Array to the parameter
//command containts the parameter :tblQueryBlob with its value
retValues[0] = cmd;
retValues[1] = conString;
return retValues;
}
private byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
我使用以下代码从另一个类调用 binaryInsert 方法:
BinaryManager bm = new bBinaryManager();
string sqlQuery = "large string with 5100 characters";
object[] binaryValues = bm.binaryInsert("TextTbl", sqlQuery, 1, 1);
string conString = binaryValues[1].ToString();
OracleCommand cmd = (OracleCommand)binaryValues[0];
QueryManager qm = new QueryManager();
qm.executeNonQuery(conString, cmd);
EDIT2(执行阅读器):
int csID = 1;
using (OracleConnection conn = new OracleConnection(conString))
{
using (OracleCommand myCommand = new OracleCommand(query, conn))
{
conn.Open();
myCommand.Connection = conn; // FIX!
using(OracleDataReader read = myCommand.ExecuteReader())
{
if (read.HasRows)
{
while (read.Read())
{
if (read[0] == System.DBNull.Value)
{
TableObject tableDBNull = new TableObject(csID, Convert.ToString(read[1]), (byte[])read[2], Convert.ToInt32(read[3]), Convert.ToInt32(read[4]));
allTables.Add(tableDBNull);
csID++;
}
else
{
TableObject tableDBNNull = new TableObject(Convert.ToInt32(read[0]), Convert.ToString(read[1]), (byte[])read[2], Convert.ToInt32(read[3]), Convert.ToInt32(read[4]));
allTables.Add(tableDBNNull);
}
}
}
}
conn.Close();
}
错误发生在 if block 中:if (read[0] == System.DBNull.Value)
最佳答案
问题不在于查询(查询错误引发来自 Oracle 命名空间的异常)。
在您的情况下,该命令与任何连接无关。
您可以通过某些方式解决它,即
internal void executeNonQuery(string connectionString, OracleCommand cmd)
{
using (OracleConnection conn = new OracleConnection(connectionString))
{
using (cmd)
{
conn.Open();
cmd.Connection = conn; // FIX!
cmd.ExecuteNonQuery(); //here is the error
conn.Close();
}
}
}
通常我更喜欢另一种方式来做到这一点
OracleConnection con = new OracleConnection(connectionString);
// Creating command from the connection
OracleCommand cmd = con.CreateCommand();
cmd.CommandText = ...........
cmd.ExecuteNonQuery();
关于c# - OracleCommand.Executenonquery 抛出 'System.InvalidOperationException',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32003129/
我正在使用 ODP.Net 版本 11.1.0 将数据插入数据库,但发现内存泄漏。如果我注释掉下面的代码,它就会消失。这段代码在我的应用程序中被调用了数千次,并且我可以看到所有堆中的字节数随着它的运行
请你耐心看完我下面要写的代码。我有两种方法: public void AddInParameters(string parameterName, OracleDbType dbtype,
我正在尝试确定如何使用以下 C# 代码将 null 指定为 OracleCommand 中的参数值。我已经摘录了相关位,但基本上关键是如果 sal_id 的值是 0,它应该存储为 null。我已经尝试
所以我在 OracleCommand 中偶然发现了一个我称之为怪癖的东西。默认情况下 BindByName 设置为 false。在这种情况下,它们将按照添加到 OracleCommand 的顺序应用于
我必须清除 oracle 数据库中的某些表,但是当我在运行以下代码时遇到问题 public static void ClearDataTables(IList tableNames)
对于我的测试,我需要模拟数据客户端,在我的例子中它们是 Oracle。 我已经创建了我的数据访问层以允许传入: public static Int32? GetUserRoleId(string us
我对以下参数的绑定(bind)有疑问。连接有效,因为我在没有使用参数的情况下对其进行了测试。但是,执行前查询的值仍然使用“@userName”而不是“jsmith”。 问题是什么?这不是绕过绑定(bi
以下函数抛出 System.InvalidOperationException: internal void executeNonQuery(string connectionString, Orac
NET 应用程序并尝试更新数据库表。下面的更新查询会起作用吗?如果我设置 BindByName = True .NET 是否也会将 null 和 SYSDATE 视为参数? PS这是缩短的查询,实际查
我想使用 ODP.NET 在 Oracle 数据库上运行各种查询,并且我想在查询中使用参数。这是一个简单的示例片段(省略了 OracleConnection 的所有明显设置位): string que
我在 SOF 上找到了一些关于如何针对 Oracle 运行多个查询(BEGIN END block 、匿名存储过程)的问题/答案。我想做几乎相同的事情,但我希望这些查询“一次性”填充多个数据表: 因此
这个问题在这里已经有了答案: problem using Oracle parameters in SELECT IN (3 个答案) 关闭 9 年前。 下面的查询有一个要分配字符串列表的参数: s
我有这个 pl/sql 函数,它唯一做的就是验证用户是否存在于数据库中,如果用户存在则返回“Y”但如果用户不存在则返回“N”,这是我想要的就是获取我在c#中pl/sql中返回的值。 我用的是oracl
为什么在 C# 时,分号 (';') 不能放在 OracleCommand 的 CommandText 中 如下所示: string sql = "select * from table1;"; Or
自 System.Data.OracleClient图书馆已deprecated ,我们正在迁移代码库以使用 Oracle Data Provider for .NET (ODP.NET)。我们遇到的
我编写了几个应用程序,其中我使用 Devart 的 DotConnect for Oracle 组件。在我当前的问题中,我看到了 Resharper 提出的几个新问题(如果忽略 Resharper 的
我有一个问题,我有一个带有大量参数的巨大插入。 我正在使用 OracleCommand 对象在执行查询之前添加我的参数。 稍后我执行 ExecuteNonQuery() 方法,它给出了 FormatE
我想使用与此类似的代码从 .net 对 Oracle 数据库进行简单查询。 using System; using System.Data; using Oracle.DataAccess.Clien
我有一个 Oracle 11g 表,其中包含以下列名称和类型: ID VARCHAR2(32 BYTE) VERSION VARCHAR2(12 BYTE) 我正在尝试使用 ODP.NET 和 C#
我是一名优秀的程序员,十分优秀!