我遇到了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();
非常感谢, 尤瓦。
答案 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。 这基本上解决了这个问题,但由于某种原因,它不支持查询中的输出修饰符,所以我不得不删除它。
所以我解决了,但仍然不知道是什么原因引起了这个问题。我猜它与不同版本的驱动程序有关。