0

このストアド プロシージャ。- SP_insertinfo は、エントリをテーブルに挿入します。

ODBC DSN 経由で Informix データベースに接続しています。

これは私のコードです。これはエラーをスローしたり、レコードを挿入したりしません。

sequeLink 3.10 32 ビット ドライバー経由で接続しています。アプリケーションは 64 ビット OS で実行されます。

データが挿入されない理由を特定しようとしています (ブレークポイントを設定すると、パラメーター化されたステートメントを実際の DB に取得すると、同じデータが挿入されますが、アプリケーション コードから実行すると失敗します)。

int rowsInserted = command.ExecuteNonQuery(); //この行は常に -1 を返し、データは挿入されません。

どんな考え/アイデアも非常に役に立ちますか?

 private void InsertInfo()
        {
            try
            {

                using(var connection = new OdbcConnection("dsn=mydsn;UID=myusername;PWD=****;"))
                {

                    var command = connection.CreateCommand();
                    command.CommandType = CommandType.StoredProcedure;
                    command.Connection = connection;
                    command.CommandText = "execute procedure SP_insertinfo(?,?)";


                     command.Parameters.Clear();

                     //Insert parameter values


                     var paramId = new OdbcParameter("ID", OdbcType.Int) { Value = Convert.ToInt32(txtID.Text.Trim()) };
                     command.Parameters.Add(paramId);


                     var paramCountry = new OdbcParameter("Country", OdbcType.VarChar, 25) { Value = txtCountry.Text.Trim() };
                     command.Parameters.Add(paramCountry);


                    connection.Open();


                    int rowsInserted = command.ExecuteNonQuery(); //This line is always returning -1 and data doesn't get inserted.

                    if (rowsInserted > 0)
                    {
                        MessageBox.Show("Insert data saved.");
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.ToString()) ;
            }




        }
4

2 に答える 2

1

最初に、準備済みステートメントとしてではなく、単純なステートメントとしてプロシージャーを実行してみてください。これは次のようになります。

command.CommandText = "execute procedure SP_insertinfo(1, 'Poland')";
connection.Open();
int rowsInserted = command.ExecuteNonQuery();

このようにして、準備されたステートメントに問題があるかどうかがわかります。

(Informix ツール)execute procedure SP_insertinfo(1, 'Poland')経由で実行してみてください。dbaccessこのようにして、ODBC の問題であるかどうかを確認できます。

動作しない場合dbaccessは、デバッグする必要がありますSP_insertinfo。問題がなければ、ODBC に問題があります。次に、ODBC トレースを有効にしてODBC Manager、生成されるログを分析することをお勧めします。

于 2013-07-24T08:20:47.507 に答える
0

長い調査の結果、ODBC dsn が sequeLink で正しく動作するためには、ドライバーがオペレーティング システムのバージョンと一致している必要があることがわかりました。Windows 7.0 64 ビットを使用しており、dsn は 32 ビットでした。 64 ビット OS で動作するための 64 ビット dsn。

于 2013-07-24T20:15:17.423 に答える