
No.7ベストアンサー
- 回答日時:
あ、ちょっと誤解があるようなので一言。
ADOのRecordSetオブジェクトや、ADO.NETのDataAdapterオブジェクトは、利用者が『泥臭いSQL文字列の直接記述』をしなくていいように、DBへの一般的な基本操作がラップされたもので、DataAdapterはその内容をウィザードで自動設定できるようになってます。すごく便利。
だけどその中身は、しっかりSQLが書かれているわけで、使っていないわけではありません。
もちろん、そのSQLの内容は自由に変更できます。
VisualStudioのプロパティウィンドウでも修正できますが、SelectCommandなら、
adapter.SelectCommand.CommandText = "SQLの取得文";
adapter.Fill(dataset);
んで、今回のような「全体一括更新」は、DataAdapterのUpdateCommandに割り当ててでもできますが、行データを返す必要がないので、より軽いSqlCommandオブジェクトを使ったほうがよいです。
(SqlCommandつうのはDataAdapterの内部オブジェクト)
using (var conn = new SqlConnection(connectionString)) {
var cmd = new SqlCommand("一括更新SQL文", conn);
cmd.Connection.Open();
cmd.ExecuteNonQuery();
// var n = cmd.ExecuteQuery(); // 処理件数を取得する必要がある場合
}
要するに、SQL文も、ストアドプロシージャも、DataAdapterからでも、SQLCommandからで実行します。
ようり高次元のTableAdapterや、LINQ for SQL、Entity Frameworkでも同じように、SQLやストアドを直実行するためのめそっどがあります。
No.6
- 回答日時:
C#で行カーソルを使って行単位の処理がしたい、ということでしょうか……。
ADOでは行単位の取得・更新ができていたのですが、
ADO.NETでは行単位の取得(DataReaderクラスを使用)しかできなくなってしまいました。
なので、
・ストアドプロシージャにしてDB側で行う
・大人しくSQLで処理する
・ORマッピングツールを使う
・DataAdapter.FillメソッドでDataTableにテーブルを読み込んだ上で、
DataTableの各行を更新し、DataAdapter.UpdateメソッドでDBに書き戻す
http://msdn.microsoft.com/ja-jp/library/dd297827 …
のいずれかの方法を取ることになるんじゃないかと思います。
No.5
- 回答日時:
> keyのないDBでどうやってSQLを組むでしょうか。
DBの種類は何ですか?
SQL ServerとかOracleとかMySQLとかAccessとかありますよね?
「keyのないDB」がどういう意味かよくわかりませんが、
テーブルに主キーや外部キーがなくても、SQLで特定列のみ更新できます。
例:「売上」テーブルの「売上額」をすべて1.05倍したい場合
UPDATE 売上
SET 売上額 = 売上額 * 1.05
(WHEREを省くとすべての行を更新します)
No.4
- 回答日時:
> たくさんの処理系があるので、.NetもDBも色々です。
DBによってやり方も色々ですし、そのすべてをここで網羅するのは不可能です。
ここで聞くより「C# DB名 更新」とかのキーワードで探す方が早いです。
> 問題なのはSQLでは処理できないテーブルです。
よく意味が分かりませんが、DBの種類が分からないと何とも言えません。
No.3
- 回答日時:
順に処理したければ
#include <stdio.h>
exec sql include sqlca;
void main() {
exec sql connect to sample;
if(SQLCODE!=0) printf("SQL CONNECT %d", SQLCODE);
exec sql declare c1 cursor for select col1, col2 from Test1 for update;
if(SQLCODE!=0) printf("SQL DECLARE %d", SQLCODE);
exec sql open c1;
if(SQLCODE!=0) printf("SQL open %d", SQLCODE);
while (SQLCODE == 0){
exec sql fetch c1 into :col1, :col2;
if(SQLCODE == 0) {
printf("%s %s\n", col1, col2);
exec sql update Test1 set col2 = 'abababab' where CURRENT OF c1;
if(SQLCODE!=0) printf("SQL UPDATE %d", SQLCODE);
}
else {
if(SQLCODE!=100) printf("SQL FETCH %d", SQLCODE);
}
}
exec sql close c1;
if(SQLCODE!=0) printf("SQL CLOSE %d", SQLCODE);
exec sql connect reset;
}
No.2
- 回答日時:
一括更新なら
#include <stdio.h>
exec sql include sqlca;
void main() {
exec sql connect to sample;
if(SQLCODE!=0) {
printf("SQL CONNECT %d", SQLCODE);
}
else {
exec sql update Test1 set col2 = 'bababa';
if(SQLCODE!=0) printf("SQL UPDATE %d", SQLCODE);
}
exec sql connect reset;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語
-
Windows Formアプリからコンソ...
-
visual studio 2022でのC#プロ...
-
C言語をコンパイルするとコンピ...
-
VisualStudioでC++クラスを追加...
-
スタックフレームの消滅
-
大量のデータを読み込んで表示...
-
プログラム言語について c言語...
-
インクリメント演算子のみを用...
-
C言語 配列と関数の練習問題
-
C言語の関数と配列に関する質問
-
VisualStudio2022でC言語プログ...
-
C++でデスクトップGUIアプリ開...
-
C言語って古いですか?
-
必ずyou bet と表示されます
-
C言語
-
C言語の関数のextern宣言
-
Cのプログラムからアクセスでき...
-
UART通信の取説で,left floati...
-
あんまり考えたくないけど
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JAVA SQLServerException 列名 ...
-
<VB.NET>INSERT文でDBにデータ...
-
データベースに存在するデータ...
-
Pro*Cの構文エラー
-
insert1つの処理でもトランザ...
-
PHPからデータベースに接続した...
-
教えて下さい。
-
SQlite
-
プリぺアドステートメントで変...
-
コードで渡したデータを降順に...
-
VB勉強中
-
like検索の複数キーワードで、...
-
PHPよりMySQLの操作のコードの...
-
connectを使ったSQL実行でエラー
-
【PHP】CSVファイル内の文字列...
-
mysql php 複数のクエリ
-
PEARのgetOneでレコードが見つ...
-
ResultSetインターフェイスでの...
-
INSERT,DELETEを同時に
-
ODBC接続でデータ件数を求...
おすすめ情報