0

我在使用 IIS、asp.net 和 ODBC 时遇到了一个奇怪的问题。我的应用程序是由 SQL 服务器通过 ODBC 驱动程序驱动的(我知道这是不好的做法,但我的整个 DAL 已经编写完毕,不会更改)。问题是,当我使用 Web 界面运行 SP 时,在生产服务器以外的任何其他计算机上它都可以正常工作,但在生产服务器上出现以下错误:

异常消息:System.Data.Odbc.OdbcException (0x80131937):错误 [42000] [Microsoft] [ODBC SQL Server Driver][SQL Server] 将数据类型 nvarchar 转换为 int 时出错

显然,当我在管理工作室下运行它时,它工作正常。我认为问题出在 IIS 和 odbc 驱动程序之间,但我不确定到底在哪里。

我正在运行 .net 框架 4。

这是调用方法:

ODBCComm command = new ODBCComm();          
        command.Query = "SP_web_update_calls_dest @id=?,@name=? ,@ivrCode=?,@DDI=?,@destType=?,@trkGroup=?,@result=? output";
        command.AddInputParam(id);
        return AddParamsAndExecute(name, ivrCode, DDI, destType, trkGroup, command);

它基本上包裹了arround:OdbcCommand.ExecuteDirect();

非常感谢,尤瓦尔。

4

2 回答 2

0

我相信您的第一个参数正在 ID 点中使用。我不知道为什么这会在预生产中起作用而只在生产中失败,但是试试这个......

ODBCComm command = new ODBCComm();           
        command.Query = "SP_web_update_calls_dest @id=?,@name=? ,@ivrCode=?,@DDI=?,@destType=?,@trkGroup=?,@result=? output"; 

        return AddParamsAndExecute(id, name, ivrCode, DDI, destType, trkGroup, command); 

我不知道 ODBCComm 是什么或 AddParamsAndExecute 做了什么,因为您没有包含相关代码,但是,请求应该如下所示:

    OdbcCommand Cmd = new OdbcCommand("SP_web_update_calls_dest", _Connection); 
    Cmd.CommandType = CommandType.StoredProcedure; 

    Cmd.Parameters.Add("@id", OdbcType.Int); 
    Cmd.Parameters["@id"].Value = id; 

    Cmd.Parameters.Add("@name", OdbcType.NVarChar); 
    Cmd.Parameters["@name"].Value = name;

    Cmd.Parameters.Add("@ivrCode", OdbcType.Int); 
    Cmd.Parameters["@ivrCode"].Value = ivrCode; 

    Cmd.Parameters.Add("@DDI", OdbcType.VarChar); 
    Cmd.Parameters["@DDI"].Value = DDI;

    Cmd.Parameters.Add("@destType", OdbcType.Int); 
    Cmd.Parameters["@destType"].Value = destType; 

    Cmd.Parameters.Add("@trkGroup", OdbcType.Int); 
    Cmd.Parameters["@trkGroup"].Value = trkGroup; 

    Cmd.Parameters.Add("@result", OdbcType.Int); 
    Cmd.Parameters["@result"].Direction = ParameterDirection.Output;

    Cmd.ExecuteNonQuery(); 

    int result = (int)Cmd.Parameters["@result"].Value; 
于 2012-06-24T13:37:05.703 回答
0

好的,我想我解决了。实际上有两个问题,我不确定是什么原因造成的。无论如何,我将 ODBC 驱动程序切换到 SQL Server Native Client 10。这基本上解决了问题,但由于某种原因,它不支持查询中的输出修饰符,所以我不得不删除它。

所以我解决了它,但仍然不知道是什么导致了问题。我猜这与不同版本的驱动程序有关。

于 2012-06-25T06:10:50.450 回答