就ADO而言,nvarchar(max)有多大? [英] How big is an nvarchar(max) as far as ADO is concerned?

查看:160
本文介绍了就ADO而言,nvarchar(max)有多大?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用针对ADO的参数化查询


INSERT INTO Foo(名称,值)VALUES(@ name,@ value)

INSERT INTO Foo (Name, Value) VALUES(@name, @value)

在SQL Server中,名称列为 varchar 类型。 Value 列是 nvarchar(max)

In SQL Server the Name column is a varchar type. The Value column is an nvarchar(max).

在我不知道或不想指定大小的情况下创建参数时,我要传递什么 size

What size do i pass when creating a parameter when i don't know, or want to specify, the size?

procedure SaveTheThing(Connection: TADOConnection);
var
   sql: WideString;
   cmd: _Command;
begin
   sql := 'INSERT INTO Foo (Name, Value) VALUES(@name, @value)';

   cmd := CoCommand.Create;
   cmd.Set_ActiveConnection(Connection.ConnectionObject);
   cmd.Set_CommandType(adCmdText);
   cmd.Set_CommandText(sql);

   //and now add the parameters
   cmd.Parameters.Append(
         cmd.CreateParameter('@name', adVarChar, adParamInput, -1, filename)
   );
   cmd.Parameters.Append(
         cmd.CreateParameter('@value', adVarWChar, adParamInput, -1, GetXmlToWideString)
   );

   cmd.Execute({out}recordsAffected, EmptyParam, adCmdSomeThatDoesntCauseAnExcetpion or adExecuteNoRecords);
end;

简单的选择是:

sql := 'INSERT INTO Foo (Name, Value)'#13#10+
       'VALUES (+QuotedStr(filename)+', '+QuotedStrW(GetXmlToWideString)+')';

,并且已经完成。但我认为我会花几天时间尝试使参数化查询成为可行的解决方案,并且避免编写 QuotedStrW

and be done already. But i thought i'd burn a few days trying to make parameterized queries a viable solution, and avoid having to write a QuotedStrW.

推荐答案

ADO参数大小的 -1 值没有问题。

You can use the -1 value in the size of a ADO parameter without problems.

尝试以下示例代码,该示例代码插入一个列中的2MB字符串

Try this sample code , which insert a 2MB string in the Value column

var
   sql: WideString;
   cmd: _Command;
   recordsAffected : OleVariant;
begin
   sql := 'INSERT INTO Foo (Name, Value) VALUES(?, ?)';
   cmd := CoCommand.Create;
   cmd.Set_ActiveConnection(Connection.ConnectionObject);
   cmd.Set_CommandType(adCmdText);
   cmd.Set_CommandText(sql);

   //and now add the parameters
   cmd.Parameters.Append(cmd.CreateParameter('@name', adVarChar, adParamInput, -1, 'AfileName'));
   cmd.Parameters.Append(cmd.CreateParameter('@value', adVarWChar, adParamInput, -1, StringOfChar('#', 2*1024*1024)));
   cmd.Execute({out}recordsAffected, EmptyParam, adExecuteNoRecords);
end;

这篇关于就ADO而言,nvarchar(max)有多大?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆