使用存储过程的麻烦,内容比较细。请大家帮忙。(30分)

  • 主题发起人 主题发起人 hansha
  • 开始时间 开始时间
H

hansha

Unregistered / Unconfirmed
GUEST, unregistred user!
环境:SQL2000+DELPHI6

在服务器中的存储过程:
CREATE PROCEDURE [select_tUse_1]
(@name [nvarchar](8))

AS select *

from [NTS].[dbo].[tUse]

where([姓名]=@name)

GO

在程序中的代码:
with ADOStoredProc1 do
begin
ProcedureName:='select_tUse_1';
Parameters.AddParameter;
Parameters[0].Value:='姓名';//或者是一个变量值
end;


但系统对参数值只取了‘姓名’的‘姓’,导致值不完全,无法找到符合条件的记录

对其他类型的参数,如@
@name [char](8),如果象上面赋值是可以通过。nvarchar类型的通不过。不知是怎
么回事,我该怎么解决呢?
 
个人观点:(没经试验)
nvarchar是双字节的编码,delphi与之相对应的应是widestring,而不是string,
两边不一致,所以可能会出问题。

 
在ADOStoredProc1.Parameters中设置是没问题的,
 
你不要动态加ADOStoredProc1的参数,要在设计期加进去,同时对参数的类型赋值
 
不要用nvarchar,我发先用变常类型的,参数传递都不正确
 
因为我要传递中文内容,所以要用NVARCHAR类型;
因为我要保证程序的灵活性,所以要动态创建参数;
这就是我的知识范围。所以有其它方法可以解决上述问题并同时满足两个要求,请不吝奉献
如果觉得分值不够,我还可以加
 
不如用个ADOQuery
SQL.Add('select_tUse_1(''姓名'')')
 
如果不用存储过程而直接用SQL是可以行得通的,但是我希望用存储过程,再等~~
 
文档中没说varchar不能存储中文呀。
为什么不先试试varchar(8)呢?
 
那你为何不把char(8)d的长度改的再长一点。不就符合你的要求了,而不用NVARCHAR类型。就避免
了这个麻烦。太灵活反而是不灵活了。
 
请问如何设定ADOStoredProc的参数类型为ftWideString,因为在改动时总是自动跳回到ftFixedChar,
而用这个类型来保存数据时结果不正确。
 
后退
顶部