0

私はエクセルシートを持っています。その Excel シートの特定のセルにクエリを記述し、C# コードからそのクエリを呼び出します。そのセルをstrParam1として宣言しました。したがって、strParam1 には、Excel シートに入力したクエリが含まれます。コードは次のとおりです。

public void UpdateDatabase(String strParam1, int row)
        {
            System.Data.OracleClient.OracleConnection conn = new System.Data.OracleClient.OracleConnection();
            conn.ConnectionString = "Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.5.144)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl)));UID=mwm;PWD=mwm";
            try
            {
                conn.Open();
                OracleCommand command = conn.CreateCommand();
                command.CommandText = strParam1.Trim();
                OracleDataReader reader = command.ExecuteReader();
                command.Dispose();
            }
            catch (Exception ex)
            {
                ExcelRecorder(ex.Message, row);
            }
            finally
            {
                conn.Close();
            }
        }

ExecuteReader に到達すると、「無効な文字が見つかりました」という例外がスローされます。Excel シートに Select * from \"Task\"; と入力しました。Task はオラクルのキーワードであるため、上記のクエリを再構築しました。しかし、クエリは実行されていません。以下のコードを入力して実行すると、すべて問題ありません。

command.CommandText = "Select * from \"Task\""; 

なにが問題ですか?私がしなければならない特別なフォーマットはありますか?また、エクセルシートからの読み込みも問題ありません。徹底的にテストしました。だから、それは私の例外を除いて何もしなければなりません.

4

1 に答える 1

1

\Excel セルから文字列を読み取り、引用符で囲まれた文字列変数内に配置する場合、エスケープするために を追加する必要はありません。
それを証明するには、UpdateDatabase メソッドにブレークポイントを設定し、strParam1 変数を調べます。
引用符が含まれていることがわかりますが、を直接 command.CommandText に割り当てるときは、文字列リテラルをエスケープする必要があります。

于 2012-07-05T07:07:25.787 に答える