不允许从数据类型ntext到char的隐性转换


存储过程如下:
CREATE Procedure SP_DoDetailNew
    @user_id char(10),
    @xmldoc ntext
AS
    declare @idoc int
    declare @dokey int
    declare @sku char(20)
    declare @req_qty int 
EXEC sp_xml_preparedocument @idoc OUTPUT, @xmldoc
begin tran TranDOdetail
INSERT INTO Web_DOdetail(dokey,sku,req_qty,add_who,add_when)
select dokey,sku,req_qty,add_who=@user_id,add_when=getdate() 
FROM OPENXML (@idoc, '/*/*',2) 
WITH (dokey int,sku char(20),req_qty int )
运行报错:System.Data.OleDb.OleDbException:不允许从数据类型ntext到char的隐性转换。请使用CONVERT函数来运行此查询。
哪位知道什么原因啊,谢谢!

8 个解决方案

#1


用cast 或者 convert
CAST 和 CONVERT
将某种数据类型的表达式显式转换为另一种数据类型。CAST 和 CONVERT 提供相似的功能。
从ntext到char是显式转换.

cast (你的变量或字段 as char(??)) 

CONVERT

CONVERT (char(??),变量或字段)


#2


参看msdn上关于cast和convert的介绍,里面有各种类型的转换图表。

#3


你在那调用的? 应该是你定义错了调用的参数类型吧? 存储过程检查过没什么问题.

#4


当然,最后面没有提交事务,这个与本问题无关

#5


在C#里调用的。
public void DoDetailNew(string user_id,XmlDocument XmlDoc)
{




ErrorMessages Err=new ErrorMessages();


int ReturnValue=0;

SQLRun objSqlRun=new SQLRun();
string[,] Param=new string[2,5];

Param[0,0]="Return_Value";
Param[0,1]="I";
Param[0,2]="Return";
Param[0,3]="4";
Param[0,4]="0";

Param[1,0]="xmldoc";
Param[1,1]="LNC";
Param[1,2]="In";
Param[1,3]="50000";
Param[1,4]=XmlDoc.InnerXml.ToString();




try
{
objSqlRun.SQLRunCommandSP("SP_DoDetailNew",Param);
ReturnValue=int.Parse(Param[0,4]);
if(ReturnValue!=0)
{
//ErrorMessages Err=new ErrorMessages();
Err.TrackSPError(ReturnValue);
return;
}

}
catch(OleDbException ex)
{
//ErrorMessages Err=new ErrorMessages();
Err.TrackError(ex);
return;
}

}

#6


看不懂C#的代码,不过
Param[1,4]=XmlDoc.InnerXml.ToString();

表示你是给存储过程定义的是字符型的参数吧?

#7


谢谢zjcxc(邹建),我明白了。

#8


存储过程多写了个参数:
CREATE Procedure SP_DoDetailNew
    @user_id char(10),
    @xmldoc ntext
AS
把 @user_id char(10),去掉就行了,C#里只有一个XML的输入参数和一个输出,问题解决。
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告