显式转换为SqlInt32的int

时间:2017-11-17 06:58:54

标签: c# tsql clr

有谁知道如何将int显式转换为SqlInt32?编译器抛出转换错误。

using System;
using System.Diagnostics;
using System.Collections;
using System.Collections.Generic;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class UserDefinedFunctions
{
    [SqlFunction()]
    static public int RarFiles(SqlString TARGET, SqlString SRC, SqlString SIZE)
    {
        ProcessStartInfo p = new ProcessStartInfo();
        p.FileName = @"C:\Program Files\WinRAR\rar.exe";
        p.Arguments = String.Format("a -cfg- -ep1 -idcdp -m5 -r -s -v{0} {1} {2}", SIZE, TARGET, SRC);
        Process x = Process.Start(p);
        SqlInt32 res = x.ExitCode;
        return res;
   }
}

2 个答案:

答案 0 :(得分:2)

如果您希望您的方法返回SqlInt32,则需要将其声明为返回一个。您当前的代码将方法的返回类型定义为int

static public int RarFiles(SqlString TARGET, SqlString SRC, SqlString SIZE)
              ^^^

这行代码可以正常工作:

SqlInt32 res = x.ExitCode;

因为正如John所指出的那样,从int到SqlInt32的隐式转换

但接下来的时间:

return res;

将尝试将SqlInt32转换为int,因为该方法返回一个int,但在该方向上,转换是显式的(您必须转换)并且由于您没有提供显式转换,您将得到一个错误。您寻求的解决方案可能不是进行显式转换,而是使用声明的方法返回类型修复问题

答案 1 :(得分:1)

public static implicit operator SqlInt32 (
    int x
)

参数

x

类型:System.Int32
整数值。

返回值
键入:System.Data.SqlTypes.SqlInt32