C# “LINQ到SQL数据上下文”;字符串长度必须正好为一个字符。”;

C# “LINQ到SQL数据上下文”;字符串长度必须正好为一个字符。”;,c#,sql-server,wcf,linq-to-sql,C#,Sql Server,Wcf,Linq To Sql,我正在通过LINQ-to-SQL在Web服务中使用存储过程。当我手动执行存储过程时,我看到它返回我需要的列,但当我使用LINQ to SQL尝试Web服务时,我得到“字符串必须正好有一个字符长。”抛出错误 详情如下: 存储过程需要四个参数:char(12),varchar(3),int,varchar(3)输出 当我这样做时:exec spName'123456789012','123','1','' 我得到了返回给我的正确列(在SQL Server 2012中),但是当我通过以下代码从Web服

我正在通过
LINQ-to-SQL
Web服务中使用
存储过程
。当我手动执行存储过程时,我看到它返回我需要的列,但当我使用
LINQ to SQL
尝试
Web服务时,我得到
“字符串必须正好有一个字符长。”
抛出错误

详情如下:

存储过程
需要四个
参数
char(12)
varchar(3)
int
varchar(3)输出

当我这样做时:
exec spName'123456789012','123','1',''

我得到了返回给我的正确列(在SQL Server 2012中),但是当我通过以下代码从Web服务调用此列时:

string str1 = "123456789012";
string str2 = "123";
int? int1 = 1;
string str3 = String.Empty;

spNameResult result = context.spName(str1, str2, int1, ref str3).FirstOrDefault<spNameResult>();
string str1=“123456789012”;
字符串str2=“123”;
智力?int1=1;
string str3=string.Empty;
spNameResult=context.spName(str1、str2、int1、ref str3).FirstOrDefault();
它抛出了一个错误,要求字符串的长度正好是一个字符


所以,我开始问我的问题:为什么exec可以工作,但是具有相同参数的Web服务调用不能工作,我如何解决这个问题?

在您的示例中,第三个参数用撇号表示-就像它是varchar(而不是int)。在c#示例中,第三个参数有int类型。请查看存储过程定义和c生成的类。第三个参数上可能有类型mess。EXEC可以工作,因为SQL Server可以在INT和VARCHAR类型之间强制转换参数


还可以使用SQL探查器捕获SQL查询。我猜LINQ使用参数而不是直接参数构建SQL查询

不过,这有助于解决问题,解决方案是LINQ to SQL将长度为1的字符串转换为字符,而在稍后传递“”时,需要“”并给出该错误。