0

我正在使用 C# 中的 DatAdapter.Fill 从 SqlBase DB 读取表信息,它适用于除 LONG VARCHAR 之外的任何变量类型,在这种情况下,它转换为 C# 中的字符串类型,如果我添加手表对象变量我看到一些奇怪的字符,所以后来当我尝试插入/更新另一个表(在另一个数据库中)时它失败了。

我知道即使 C# 中的值可以,我也不能按原样插入,文档说我应该将值绑定到一个变量以便能够插入到表中,但我不知道该怎么做因为我在 C# 中创建要在 SqlBase 中运行的脚本,所以我没有从 C# 采取直接行动,即使我无法正确读取该值,因为它转换为带有奇怪数字的字符串到它,这个 LOAG VARCHAR 像 Sql Server 中的 VARBINARY 吗?我假设是因为我遇到问题的列是一个 LOGO,就像一张图片。

所以简而言之,有什么办法可以

  1. 从 .NET 中读取一个长的 varchar,然后..
  2. ..在向表中插入/更新值时使用它?

(1) 是 .NET,但 (2) 是使用 SqlTalk 在 Sqlbase 上运行的 sql 脚本。

谢谢!

4

1 回答 1

1

建议您使用 SQLTalk 命令将 Long 数据卸载到平面文件。这样你就会得到可读的数据。如果需要,使用 C# 读取平面文件,并使用它做任何你想做的事情,但是要使用 SQLTalk 将数据重新加载到另一个表中,你需要使用特定的语法。转到此处:SQLBase 手册(所有版本) 提取适合您正在使用的 SQLBase 版本的手册,并 1) 从“SQLBase 语言参考”中阅读 UNLOAD 以将 Long 数据输出到一个平面文件中(有不同的语法给出不同的结果)。然后 2) 阅读“SQLTalk 命令参考”中的“长数据绑定变量示例”,因为您必须将 LONG VARCHAR 数据设置为绑定变量。将长数据插入 LONG VARCHAR 或 LONG NVARCHAR 或 LONG BINARY 列时,在其前面加上 $LONG 关键字。然后,您可以开始在下一行输入数据,并继续在后续行中输入。要标记文本的结尾,请在新行 (//) 上输入双斜杠。例如

INSERT INTO BIO (NAME, BIO) VALUES (:1,:2)
\
SHAKESPEARE, $LONG
William Shakespeare was born in Stratford-on-Avon on
April 16, 1564. He was England's most famous poet and
dramatist. . . . .. . .
He died in 1616, leaving his second best bed to his wife.
//

如果 LONG (N)VARCHAR 或 LONG VARBINARY 列的数据来自文件,请在 $LONG 关键字后输入文件名。例如

INSERT INTO BIO (NAME, BIO) VALUES (:1,:2)
\
SHAKESPEARE, $LONG shakes.txt
JONSON,$LONG jonson.txt
O'NEILL,$LONG oneill.txt
/

更新长数据,例如

UPDATE TABLE EXPENSES SET COMMENTS = :1 WHERE DATE = :2
\
"Beltran Tree Service", 1/1/94 "Hercules", 1/2/94
"Checkup", 1/3/94
/

于 2020-08-27T21:47:23.783 回答