Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#LINQ ObjectParameter将STP输出转换为SQL数据类型_C#_Sql_Sql Server_Linq_Stored Procedures - Fatal编程技术网

C#LINQ ObjectParameter将STP输出转换为SQL数据类型

C#LINQ ObjectParameter将STP输出转换为SQL数据类型,c#,sql,sql-server,linq,stored-procedures,C#,Sql,Sql Server,Linq,Stored Procedures,我一直在寻找答案,但找不到答案,有些事情真的很奇怪 我有一个SQL存储过程,它以smallint形式返回输出参数 ALTER PROCEDURE [STP_NAME] @Out_Error_Level Smallint OUTPUT SELECT @Out_Error_Level = 0 非常简单,当我通过SQL Management studio执行时,它可以完美地工作 现在奇怪的是,当我通过C#Link执行时,我得到了“Bigint”。C代码也很简单: DS_RAS_CD_APPE

我一直在寻找答案,但找不到答案,有些事情真的很奇怪

我有一个SQL存储过程,它以smallint形式返回输出参数

ALTER PROCEDURE [STP_NAME] 
@Out_Error_Level    Smallint OUTPUT
SELECT @Out_Error_Level = 0
非常简单,当我通过SQL Management studio执行时,它可以完美地工作

现在奇怪的是,当我通过C#Link执行时,我得到了“Bigint”。C代码也很简单:

DS_RAS_CD_APPEntities2 db = new DS_RAS_CD_APPEntities2();
ObjectParameter outputError = new ObjectParameter("Out_Error_Level", SqlDbType.SmallInt);
var updateProcessesList2 = db.STP_NAME(outputError);
Console.WriteLine(outputError.Value);
结果是:BigInt。

现在,当我将sql中的输出更改为不同的数字时,我会得到一些数据类型,例如:1返回二进制,2返回位,3返回字符,10返回Nchar

当我设置@Out\u Error\u Level=35时结束,结果是35


有什么帮助吗?

如果查看ObjectParameter的构造函数,您将看到有两个重载:

ObjectParameter(String name, Object value)
ObjectParameter(String name, Type type)
如果查看作为第二个参数提供的内容,那么它不是一个类型,因此必须使用第一个重载

如果我们再看看它对第二个过载的描述:


类型:System.Object
参数的初始值(以及固有的类型)

因此,正如您所看到的,它将您传递的值(
SqlDbType.SmallInt
)作为默认值,并使用该值计算出对象应为的类型-在本例中,当然是枚举
SqlDbType
。因此,您传递回的每个数字都将被转换为其对应的枚举。一旦您提供了枚举中不存在的数字,它只返回数字本身

你可能想做的是

new ObjectParameter("Out_Error_Level", typeof(Int16));
我使用
Int16
,因为这与数据库SmallInt是等效的。您同样可以使用更常见的
Int32
,我希望它可以正常工作

资料来源:

总结一下,如果你得到了错误的结果,那么我建议你一定要看一下为你使用的对象和方法提供的文档,确保你没有对它的工作原理做出任何错误的假设