質問

MSSQLアプリケーションをSybase(ASE 15.0)に移植し、電話したときに問題が発生します GetDeleteCommand。報告されているエラーは次のとおりです。

deleteCommandの動的SQL生成は、キー列情報を返さないSelectCommandに対してサポートされていません。

問題は一時的なテーブルでのみ発生し、同一の非同時テーブルは正常に機能します。テーブルには主キーが含まれています。

以下のテストプログラムを使用して複製します。



    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.OleDb;
    using System.Data;

    namespace DataAdapterTempTable
    {
        class Program
        {
            static void Main(string[] args)
            {
                String ConnectionString = "Provider=ASEOLEDB;Data Source=devsun3:5003;Initial Catalog=ctc;User ID=aigtac12;Password=aigtac12;"; // sybase connection string
                //String ConnectionString = "Provider=SQLOLEDB;Data Source=fiji;Persist Security Info=False;Initial Catalog=nxgn0811;Integrated Security=SSPI"; // mssql connection string

                String TableName = "#alex_temporary_table_test"; // does not work for sybase
                //String TableName = "alex_real_table_test"; // works for sybase + mssql

                String CreateStatement = "create table " + TableName + " (currency_id varchar(4) primary key, rate  decimal(25,6), format   char(1))";

                String SelectStatement = "select * from " + TableName;

                try
                {
                    OleDbConnection con = null;
                    con = new OleDbConnection(ConnectionString);
                    con.Open();

                    OleDbCommand cmd = con.CreateCommand();
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = CreateStatement;
                    int count = cmd.ExecuteNonQuery();

                    OleDbCommand cm1 = con.CreateCommand();
                    cm1.CommandType = CommandType.Text;
                    cm1.CommandText = SelectStatement;
                    OleDbDataAdapter DA2 = new OleDbDataAdapter(cm1);
                    DataTable DT2 = new DataTable();
                    DA2.FillSchema(DT2, SchemaType.Mapped);
                    OleDbCommandBuilder cmdbldr = new OleDbCommandBuilder(DA2);
                    DA2.InsertCommand = cmdbldr.GetInsertCommand();

                    DA2.DeleteCommand = cmdbldr.GetDeleteCommand(); // this line fails in sybase for temporary table

                    DA2.UpdateCommand = cmdbldr.GetUpdateCommand();
                    DA2.Fill(DT2);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }
        }
    }


役に立ちましたか?

解決 2

Sybaseのサポートに連絡して、システムストアドプロシージャを更新する必要があることがわかりました。 「OLEDB SP」で終了するフォルダーがあり、フォルダーから.batファイルを実行する必要がありました。最新のEBFを入手して、Batchファイルinstall_oledb_sprocs.batを実行しました。問題はなくなりました。言及する価値は、Sybase 15.5にはパッチをかけずに問題を抱えていなかったことがあります。

PS問題を調べてくれた「AF」に感謝します。

他のヒント

ではなく、選択ステートメントで * 列名を使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top