gpt4 book ai didi

c# - 如何使用 ExecuteNonQuery 在 VARCHAR(MAX) 列中插入超过 8000 个字符?

转载 作者:行者123 更新时间:2023-11-30 19:43:40 25 4
gpt4 key购买 nike

我正在尝试通过 ExecuteNonQuery(和来自 MS Practices Enterprise Library 的 DatabaseFactory.CreateDatabase())插入 > 8000 个字符(从网页提交)。存储过程将参数定义为 VARCHAR(MAX)。该列是 VARCHAR(MAX)。理论上应该可以通过2GB的数据。

我该怎么做才能传递数据 > 8000?我设置了一个断点,string.Length 确实 > 8K。

   public static void UpdateTerms(string terms)
{
Database db = DatabaseFactory.CreateDatabase();
db.ExecuteNonQuery("uspUpdateTerms", terms);
}

存储过程:

ALTER PROCEDURE [dbo].[uspUpdateTerms]
@Terms VARCHAR(MAX)
AS
SET NOCOUNT ON

INSERT INTO tblTerms(Terms)
VALUES(@Terms)

表格(只是为了表明一切都是varchar(max)):

CREATE TABLE [dbo].[tblTerms](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Terms] [varchar](max) NULL,
[DateUpdated] [datetime] NULL,

.

更新:

我刚刚更改了代码,这似乎有效,但我不确定有什么区别:

 public static void UpdateTerms(string terms)
{
Database db = DatabaseFactory.CreateDatabase();
DbCommand cmd = db.GetStoredProcCommand("uspUpdateTerms");
db.AddInParameter(cmd, "Terms", DbType.String, terms);
db.ExecuteNonQuery(cmd);
}

最佳答案

问题可能不是数据的存储,而是检索。

如果您试图通过企业管理器确定数据库中是否存储了超过 8000 个字符,那么如果您只是选择列的内容并查看文本长度,那么您就不走运了:企业管理器限制列输出。

要确定列中实际存储了多少数据,请执行以下查询:

SELECT DATALENGTH(Terms) FROM tblTerms

这会告诉您存储了多少文本。

编辑:

另一个想法刚刚出现:企业库缓存存储过程参数以提高性能。如果在将参数设置为 nvarchar(8000) 进行测试后更改了存储过程,则将参数切换为 nvarchar(max) 而无需重置应用程序(如果 IIS 托管,然后是 iisreset 或脏 web.config),那么您仍将使用旧的存储过程参数。

关于c# - 如何使用 ExecuteNonQuery 在 VARCHAR(MAX) 列中插入超过 8000 个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14348778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com