在iis上运行的ODBC驱动的ASP.NET应用程序不适用于特殊系统

时间:2012-06-24 12:16:58

标签: asp.net iis odbc

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

异常消息:System.Data.Odbc.OdbcException(0x80131937):ERROR [42000] [Microsoft] [ODBC SQL Server驱动程序] [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();

非常感谢,     尤瓦。

2 个答案:

答案 0 :(得分: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; 

答案 1 :(得分:0)

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

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