使用 sybase AseCommand 运行 ExecuteNonQuery() 时出错

Posted

技术标签:

【中文标题】使用 sybase AseCommand 运行 ExecuteNonQuery() 时出错【英文标题】:Getting an error when running ExecuteNonQuery() using sybase AseCommand 【发布时间】:2020-09-22 18:15:54 【问题描述】:

当我使用 sybase 提供程序 Sybase.AdoNet4.AseClient 在 C# ADO.NET 中运行 writetext sql 命令时出现错误。我尝试了很多不同的东西,例如使用参数索引、命名参数等。有人可以帮忙吗?我在下面显示示例代码。

AseConnection cn = new AseConnection(connection.ConnectionString);
cn.Open();

//..... there is other code here that calls a stored procedure and gets textpointer 
// reference, but I am leaving it out to keep it short and simple

AseCommand cmd2 = new AseCommand("writetext mytable.column1 @textPointer @bigText", cn);
cmd2.CommandType = CommandType.Text

cmd2.Parameters.Add(new AseParameter("@textPointer", AseDbType.VarBinary, 16));
cmd2.Parameters["textPointer"].value = textPointerOut.value

cmd2.Parameters.Add(new AseParameter("@bigText", AseDbType.Text));
cmd2.Parameters["bigText"].value = bigText;

cmd2.ExecuteNonQuery();

cmd2.ExecuteNoQuery() 抛出异常,错误为必须声明变量@textPointer

更新:如果我尝试下面的这种语法,我会收到一条错误消息 Incorrect sntax near '@bigText'

AseCommand cmd2 = new AseCommand("writetext mytable.column1 @textPointer @bigText", cn);

【问题讨论】:

我没有使用 Sybase 和 Asecommand...,但是,在为参数设置值时,您可能不需要使用 @。 @isaeid 我会试试你的建议。谢谢。 @isaeid 根据您的建议进行了更改。我仍然遇到同样的错误。 【参考方案1】:

我太坚持将 AseParameter 传递给动态 SQL。无需使用命名参数。使用动态 sql,我必须执行以下操作:

    声明 textPointer 变量 获取指向我要更新的列的指针 使用 writetext 命令更新列

【讨论】:

以上是关于使用 sybase AseCommand 运行 ExecuteNonQuery() 时出错的主要内容,如果未能解决你的问题,请参考以下文章

Sybase 运行从先前查询生成的 SQL

通过批处理在 Sybase 中运行大量 SQL 脚本

如何在sybase中将字符串转换为日期

sybase 如何像SQL SERVER一样建立作业,让他能定时运行存储过程

PDO Prepared Statement over ODBC Sybase“PARAM 数据流”错误

如何查看 Sybase 中的列元数据?