2011-12-29 12 views
0

テーブルからSQL selectを介してレコードの総数を取得し、変数&に順番に格納し、そこに「1」を追加することができます新しいレコードの追加をシミュレートしますか?フィールドIDに1を加えることで新しいレコードの追加をシミュレート

私は次があります。

myCmd.CommandText = "SELECT COUNT (product_category_id) FROM ProductCategory" 
      Try 
      myConn.Open() 
      dtrReader = myCmd.ExecuteReader() 

      If dtrReader.HasRows Then 
       'search DB for total records 
       Dim a As Integer = ??? 
       lblProductID.Text = "Entry Number " + ((a + 1).ToString) 
      End If 
     Catch 
     End Try 
+0

いいえ、どのビットを貼り付けていますか、試してみましたか? –

+0

こんにちは、はい、私はすぐにそれを行います。こんにちはトニー、iveは上記を試したが、構文が間違っている&私は非常に明白な何かが欠けていると確信しています。上記を達成する必要がある場合は、いくつかのサンプルコードを私に提供しますか? – brainsfrying

答えて

0

これは本当にiffyです。 あなたが表示さしようとしているIDが関連している間、それはオート株式会社だとあなたが排他性を保証することができた場合は、レコードが今までにされない場合、SELECT COUNT(Product_category_idが)のみ動作します

そして、誰もが別のレコードを削除/挿入することはできない、すなわち、削除されました。 最大値(product_category_id)を選択すると、最後のものが削除されなかった場合にのみ機能します。アイデンティティと新しく作成されたテーブルを考えると

は、その後、あなたの身元あなたidentity_seedと増分は1と1は保証されませんデフォルトで、あるある何があります1

1st insert will create an id 1 
2nd insert will create an id 2 
Next will be 3 
Delete id 1 now Max is still 2 and OK but count is 1, so will be wrong 
Or 
Delete id 2 now Max is 1 and Count is 1 so now max and count are wrong... 

Delete both and it's still wrong. Next id to use is independent of the existing data.... 

の増分で、1で播種しました。

SQL Serverを使用しているDBMSとMySQLのバージョンを教えてください。

しかし、コンセプト全体には完全な欠陥があるため、auto-incの価値はこれまで間接的にユーザーに表示されるべきではありません。

挿入しても表示されません。これはデータベース内の内部識別子であり、公開しないでください。

なぜこれをやりたいですか?あなたが必要とするものを達成するためのより良い方法がありますが、あなたは私たちにいくつかの手がかりを与えなければなりません。

+0

@トニー:そうですね、両方のアドバイスを取るでしょう。割当てを中断し、試してみるのは実用的ではありません。あなたがどこから来ているのか理解しています。私はそれを感謝します。:)私はSQLサーバーbtwを使用しています。 – brainsfrying

+0

悪い習慣は、良いものが仲良くなる限り長く続き、破るのと同じくらい難しいです。 SQL Server 2011では、このようなことを行うことができます。明らかに、コースでは... –

0

それはあなたが達成したいかに依存します。それに関するいくつかのさらなる情報は良いでしょう。私には、一時的な(まだ挿入されていない)レコードの次の自動インクリメントプライマリキー値または行位置を取得しようとしているようです。そうするなら、並行性を考慮する必要があります。他の誰かが別のセッションで同じタスクを行うことができるので、このユーザーに表示されるエントリ番号は、同じテーブルを含むタスクを既に完了している別のユーザーによって「取得」される可能性があります。

私はまず自分自身に質問します。なぜこの値を表示する必要がありますか?この値は、ユーザが後続のタスクについて書き留めるかもしれない自然な識別子ですか?もしそうなら、(物理的にDBに)挿入された後にのみ、レコードの識別子を表示することをお勧めします。

+0

あなたは上記を言っているのです。私は並行性に関して何の問題もないと仮定し、管理者側からそれをやっていますが、関連する指針を教えてくれますか? – brainsfrying

+0

こんにちは?私は試していた、任意のアイデア? – brainsfrying

+0

この場合ガイダンスは難しいです。問題に関する詳細情報を提供する必要があります(新しい詳細な質問を開始してください)。ユーザーインターフェイスの流れやページの内容など...私が見るところでは、レコードの挿入をシミュレートするだけではなく、挿入する必要があります。この場合、ユーザーにアプリの機能をどのように提示するかによって異なります。 – Chris

関連する問題