Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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#中,我会从SQL命令参数对象中的DbType中得到一个完全不同的类型代码?_C#_Sql Server 2008_Stored Procedures - Fatal编程技术网

不知道为什么在c#中,我会从SQL命令参数对象中的DbType中得到一个完全不同的类型代码?

不知道为什么在c#中,我会从SQL命令参数对象中的DbType中得到一个完全不同的类型代码?,c#,sql-server-2008,stored-procedures,C#,Sql Server 2008,Stored Procedures,我敢肯定有人会把这一个烧掉的。。虽然我看到的概念看起来还不错 基本上,我正在尝试动态设置SQL命令参数类型和值。所以基本上我是: 动态获取参数的DbType。。所以这部分很好——只是引用如下:DbType ParamDBtype=cmd.Parameters[Param1Variable.DbType 然后(不管愚蠢与否!)我尝试在.NET中获取类型,以便将值转换为正确的类型(因为在我的示例中,我只是将值/对作为字符串获取..因此需要让DbType知道转换为什么类型) 显然我可以做到: Type

我敢肯定有人会把这一个烧掉的。。虽然我看到的概念看起来还不错

基本上,我正在尝试动态设置SQL命令参数类型和值。所以基本上我是:

  • 动态获取参数的DbType。。所以这部分很好——只是引用如下:DbType ParamDBtype=cmd.Parameters[Param1Variable.DbType
  • 然后(不管愚蠢与否!)我尝试在.NET中获取类型,以便将值转换为正确的类型(因为在我的示例中,我只是将值/对作为字符串获取..因此需要让DbType知道转换为什么类型)
  • 显然我可以做到: TypeCode ParamDBtypeCode=cmd.Parameters[Param1Variable.DbType.GetTypeCode()

    现在,在使用Convert语句时可以使用类型代码:

    Convert.ChangeType(Param1Value,ParamDBtypeCode)

    嗯,它可以工作..某种程度上,因为我有一个参数是整数,转换将该值转换为int..但是我有一个参数是一个AnsiString DbType,该参数的类型码仍然是int16

    任何人都有这样的问题,或者可以为我指出一个更好的方向

    本质上,我试图动态地将值分配/转换到存储过程


    感谢您的帮助。

    您看到的是值上的
    对象。GetTypeCode()
    ,如果是
    数据库类型,则显示“值”是枚举。枚举的类型代码只是枚举的基础类型:
    int
    。在本例中,它将为每个
    数据库类型
    报告
    int
    ——即使不存在:

    var dbtype = (DbType)(-12341);
    var typeCode = dbtype.GetTypeCode(); // Int32
    
    您试图执行的操作与
    DbType
    GetTypeCode()
    无关。这里的问题是“显然”


    如果确实要将枚举映射到其他对象,则理想的方法是使用
    开关
    。完全可能需要您自己提供映射。

    您看到的是值上的
    对象。GetTypeCode()
    ,如果是
    数据库类型
    则是“值”是枚举。枚举的类型代码只是枚举的基础类型:
    int
    。在本例中,它将为每个
    数据库类型
    报告
    int
    ——即使不存在:

    var dbtype = (DbType)(-12341);
    var typeCode = dbtype.GetTypeCode(); // Int32
    
    您试图执行的操作与
    DbType
    GetTypeCode()
    无关。这里的问题是“显然”


    如果确实要将枚举映射到其他对象,则理想的选择是使用
    开关
    。完全可能需要您自己提供映射。

    据我所知,DbParameter的“值”是“对象”因此,您无需转换任何内容即可将其指定为DbParameter的值。如果DbParameter已正确设置了类型,则可以继续。嘿,谢谢。我正试图从集合中的字段名中找出参数类型,然后正确指定。完全忘了使用SetParameter,它只允许您传递字段/值..谢谢!据我所知,DbParameter的“值”是“object”因此,您无需转换任何内容即可将其指定为DbParameter的值。如果DbParameter已正确设置了类型,则可以继续。嘿,谢谢。我正试图从集合中的字段名中找出参数类型,然后正确指定。完全忘了使用SetParameter,它只允许您传递字段/值..谢谢你!嘿,谢谢你的回复..我经历了一个愚蠢的过程..只需从我拥有的集合中的字段名中查询param dbtype..然后当然分配“that”dbtype到database.AddInParameter方法,该方法采用参数名称、类型、值…相反,我只使用了database.SetParameter方法,该方法仅采用参数/值…再次感谢您的回复!嘿,感谢您的回复..看起来我正在经历一个愚蠢的过程..只需从集合中的字段名查询参数dbtype我必须..然后当然要将“that”dbtype分配给database.AddInParameter方法,该方法采用param名称、类型、值…而我只使用database.SetParameter方法,该方法仅采用param/值…再次感谢您的回复!