0

IIS、asp.net、および ODBC で奇妙な問題が発生しています。私のアプリケーションは、ODBC ドライバーを介して SQL サーバーによって駆動されます (それが悪い習慣であることはわかっていますが、私の 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);

それは基本的にラップアラウンド: 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

わかりました、私はそれを解決したと思います。実際には 2 つの問題がありましたが、何が原因なのか正確にはわかりません。とにかく、ODBC ドライバーを SQL Server Native Client 10 に切り替えました。これで基本的に問題は解決しましたが、何らかの理由でクエリの出力修飾子がサポートされていないため、それを削除する必要がありました。

それで解決しましたが、何が問題の原因なのかまだわかりません。ドライバーのバージョンが違うことと関係があると思います。

于 2012-06-25T06:10:50.450 に答える