是否可以将大字符串写入 Firebird blob?

2024-05-26

Firebird 的文档暗示您可以将大型 (> 60K) 字符串写入表中的 blob 值。所以如果你有这个:

CREATE TABLE MyBlobTable (
theId int PRIMARY KEY NOT NULL,
theBlob BLOB SUB_TYPE 1
)

那么这应该有效:

insert into MyBlobTable (theId, theBlob) values (1, '[60K characters in a string]')

(示例灵感来自http://web.firebirdsql.org/dotnetfirebird/blob-sub_type-1-reading-example-csharp.html http://web.firebirdsql.org/dotnetfirebird/blob-sub_type-1-reading-example-csharp.html)

但我发现 C# 驱动程序和 FlameRobin 都不能写入这个值。你得到“命令意外结束”(指向字符串中大约 32K 的位置,这有点可疑)

我认为有一种特殊的方法来引用或转义数据值,或者可能是此 Java 代码 (http://www.firebirdfaq.org/faq372/) 的 C# 等效方法,其中二进制文件直接读入语句中。我没有对文本数据做任何花哨的事情,所以如果需要的话我愿意将其存储为二进制 blob。

Thanks!

更新:“参数化查询”是我正在寻找的短语。我在做什么:

FbParameter param = new FbParameter("@blobVal", FbDbType.Text);
param.Value = myLargeString;
String query = "insert into MyBlobTable (theId, theBlob) values (1, @blobVal)";
using (FbConnection conn = [something from my pool]) {
    using (FbCommand cmd = new FbCommand(query, conn)) {
        cmd.Parameters.Add(param);
        cmd.ExecuteNonQuery();
    }
}

您正在查询中添加内联文本。然后还有限制:Firebird 2.5 及更早版本中的首次查询文本限制为 64 KB,在 Firebird 3.0 中增加到 10 MB,但某些工具可能仍以将其限制为 64 KB 的方式使用 API。字符串文字大小也有限制:32KB,或者从 Firebird 3.0 开始,如果它是 blob 值的文字,则为 64KB。

如果要将更多数据添加到 blob,则需要使用参数化查询将其流式传输到 blob。看这个例子 https://web.archive.org/web/20191024114358/http://firebirdsql.org:80/en/net-examples-of-use/#update_text_blob_field:

public static void Main(string[] args) {
    // Set the ServerType to 1 for connect to the embedded server
    string connectionString =
        "User=SYSDBA;" +
        "Password=masterkey;" +
        "Database=SampleDatabase.fdb;" +
        "DataSource=localhost;" +
        "Port=3050;" +
        "Dialect=3;" +
        "Charset=NONE;" +
        "Role=;" +
        "Connection lifetime=15;" +
        "Pooling=true;" +
        "Packet Size=8192;" +
        "ServerType=0";
    
    FbConnection myConnection = new FbConnection(connectionString);
    myConnection.Open();
    
    FbTransaction myTransaction = myConnection.BeginTransaction();
    
    FbCommand myCommand = new FbCommand();
    
    myCommand.CommandText =
        "UPDATE TEST_TABLE_01 SET CLOB_FIELD = @CLOB_FIELD WHERE INT_FIELD = @INT_FIELD";
    myCommand.Connection = myConnection;
    myCommand.Transaction = myTransaction;
    
    myCommand.Parameters.Add("@INT_FIELD", FbType.Integer, "INT_FIELD");
    myCommand.Parameters.Add("@CLOB_FIELD", FbType.Text, "CLOB_FIELD");
    
    myCommand.Parameters[0].Value = 1;
    myCommand.Parameters[1].Value = GetFileContents(@"GDS.CS");
    
    // Execute Update
    myCommand.ExecuteNonQuery();
    
    // Commit changes
    myTransaction.Commit();
    
    // Free command resources in Firebird Server
    myCommand.Dispose();
    
    // Close connection
    myConnection.Close(); 
}

public static string GetFileContents(string fileName) {
    StreamReader reader = new StreamReader(new FileStream(fileName, FileMode.Open));
    string contents = reader.ReadToEnd();
    reader.Close();
    return contents; 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以将大字符串写入 Firebird blob? 的相关文章

随机推荐

  • JavaScript 键码 46 是 DEL 功能键还是 (.) 句点符号?

    我使用 jquery 在 JavaScript 中编写一些逻辑 其中我必须根据 REGEX 模式检查输入内容 例如 a zA Z0 9 Alpha numeric and 逻辑差不多完成了 我只是在过滤功能键 DEL 时遇到了一点问题 我的
  • 为什么在 CSS3 中启用硬件加速会降低性能?

    我在 css3 实验中将 10 000 个小 div 元素从浏览器视口的顶部移动到底部 对于此测试 我使用两种不同的方法 使用 GPU 加速translate3D x y z or translateZ 0 无需 GPU 加速 只需调整to
  • OpenCV Python 和 SIFT 功能

    我知道有很多关于Python and OpenCV但我没有找到有关这个特殊主题的帮助 我想提取SIFT关键点来自 python OpenCV 中的图像 我最近安装了 OpenCV 2 3 可以访问 SURF 和 MSER 但不能访问 SIF
  • 在 iOS 中对 Google 地图标记进行聚类

    我有一个基于地图的应用程序 使用 Google 地图的 iOS SDK 我需要在核心数据数据库中存储多达数千个项目 并在地图上用标记显示它们 出于性能和可用性的原因 我需要在用户缩小时对这些标记进行聚类 但我需要确保放置代表性标记 以便用户
  • 我在 Android Studio 中使用哪个版本的 JDK 有关系吗?

    I know I can choose the SDK location in Android Studio s Project Structure 我有两个问题 当我们已经使用Android SDK时 为什么还需要JDK 毕竟我们不是为
  • Pandas 将 NULL 读取为 NaN 浮点数而不是 str [重复]

    这个问题在这里已经有答案了 给定文件 cat test csv a b c NULL d e f g h i j k l m n 其中第三列被视为str 当我对列执行字符串函数时 pandas已阅读NULLstr 作为一个NaN float
  • 使用无符号而不是有符号 int 是否更有可能导致错误?为什么?

    In the 谷歌 C 风格指南 https google github io styleguide cppguide html Integer Types 关于 无符号整数 主题 建议 由于历史意外 C 标准也使用无符号整数来表示容器的大
  • Visual Studio 2010:依赖图

    我有VS 2010专业版 我可以使用 依赖图 做什么 我没有 建筑 版本 有没有我可以使用的免费插件 如果没有 是否有任何免费的第三方工具可以帮助我做同样的事情 Thanks 我需要类似的东西 但不想付费 或安装 工具来完成它 我创建了一个
  • Aurelia 验证不适用于对象属性

    我无法让 Aurelia Validate 处理我的日历记录中的字段 日历 html 摘抄
  • Laravel 5:如何检索并显示属于特定类别的所有帖子

    我有3张桌子 user id username subreddits id name created at posts id title link user id subreddit id 问题是 我手动获取 subreddit 类别的 i
  • 小部件双击

    我有一个小部件 AppWidgetProvider 我想知道是否有办法支持多次点击 示例 1 如果是第一次点击widget 那么widget的ImageButton会发生变化 例如 改变颜色 2 如果是第二次 则打开一个Activity A
  • 如何从 main 之外的类访问 XAML 对象?

    如果我尝试 var mainpage new Mainpage 我将运行主页构造函数 然后 XAML 对象中的所有字段都将返回 null 如何在 silverlight 中访问来自不同类但属于同一命名空间的 XAML 对象 让我通过例子来解
  • 如何使用 gatsby-image 不裁剪地显示图像?

    实例 图像可能加载缓慢 https suhadolnik photo surge sh portreti https suhadolnik photo surge sh portreti 我正在使用 GatsbyJS 制作一个摄影网站 并使
  • ASP.NET Core 7.0 登录时出错:证书链由不受信任的机构颁发

    我使用 SQL Server 创建了一个简单的 NET 7 0 应用程序 如果我使用默认的 localdb 甚至在将其更改为 网络服务器 之后 我会收到以下错误 证书链是由不受信任的机构颁发的 我的连接字符串是 mysqlserver co
  • 在Windows cmd中获取精确到毫秒的系统时间

    我试图在 Windows cmd 中将系统时间精确 到毫秒 我知道可以使用以下方法获得厘秒精度 echo time 我发现其他问题提出了完全相同的问题 但没有答案可以完全回答该问题 这是我到目前为止发现的 该解决方案仅适用于厘秒精度 与我上
  • 如何设置Java线程的CPU核心亲和力?

    我搜索了以前关于类似主题的帖子 但找不到合适的答案 因此提出这个问题 非常感谢您帮助回答 我知道在 Linux 中通过任务集命令设置进程与特定 CPU 核心的关联性 但我想设置 Java 线程与特定 cpu 核心的亲和力 以便属于同一进程的
  • 渲染函数的反应性参数

    我在 Flexdashboard 中有一个表 其列数可以更改 我可以动态计算列的对齐方式 默认对齐方式 23 45作为字符向量 因此左对齐该值 尽管它是一个数字并且应该右对齐 问题是我无法将此对齐传递回renderTable作为一个值ali
  • 为什么 GORM 不保存我的对象?

    如果我在 Grails 控制台中执行此代码 def p new Post title T p save flush true or p save Post count GORM 没有抛出任何异常 但数据没有保存在我的数据库中 我究竟做错了什
  • HTML5 canvas:有没有办法通过“最近邻居”重新采样来调整图像大小?

    我有一些 JS 对图像进行一些操作 我想要类似像素艺术的图形 所以我必须在图形编辑器中放大原始图像 但我认为用小图像进行所有操作然后使用 html5 功能放大它是个好主意 这将节省大量处理时间 因为现在my demo http anal s
  • 是否可以将大字符串写入 Firebird blob?

    Firebird 的文档暗示您可以将大型 gt 60K 字符串写入表中的 blob 值 所以如果你有这个 CREATE TABLE MyBlobTable theId int PRIMARY KEY NOT NULL theBlob BLO