C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: ExecuteNonQueryに関して


(過去ログ 79 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■47115 / inTopicNo.1)  ExecuteNonQueryに関して
  
□投稿者/ SEELE (1回)-(2010/02/18(Thu) 17:31:26)

分類:[C#] 

言語;Microsoft Visual C# 2005
DB;SQL Server 2005

お世話になります。
コンソールアプリケーションにて、全く同項目を持つテーブル1とテーブル2に
データを登録するプログラムを作成しています。

全く同じデータ(重複するデータ)を登録しようとすると
テーブル1は以下※のExceptionを返してくれるのですが、
テーブル2はExceptionを返してくれません。
intRecCnt = cmd.ExecuteNonQuery(); intRecCntは0で終了します。

※Exceptionの内容
System.Data.SqlClient.SqlException: 制約 'PK_TEST1' の PRIMARY KEY 違反。オブジェクト 'dbo.TEST1' には重複したキーを挿入できません。ステートメントは終了されました。

テーブル1とテーブル2の相違点としますと、
オブジェクトエクスプローラでテーブルを展開すると「統計」というフォルダがありますが、
そこに多数ファイルがある方がテーブル2です。

調べてみたのですが、難しすぎて良くわかりません…。
ご存じの方いらっしゃいましたら、ご教授の方を宜しくお願い致します。

引用返信 編集キー/
■47117 / inTopicNo.2)  Re[1]: ExecuteNonQueryに関して
□投稿者/ オショウ (521回)-(2010/02/18(Thu) 17:44:17)
No47115 (SEELE さん) に返信
> テーブル1とテーブル2の相違点としますと、
> オブジェクトエクスプローラでテーブルを展開すると「統計」というフォルダがありますが、
> そこに多数ファイルがある方がテーブル2です。
>
> 調べてみたのですが、難しすぎて良くわかりません…。
> ご存じの方いらっしゃいましたら、ご教授の方を宜しくお願い致します。

  いやいや・・・
  主キーの設定のあるなしでしょう!

  もう一度、テーブルのデザインで、主キーの設定を確認して下さい。

※ で、どうしたいの?
  インサートを成功させたいの?
  それとも両方ともエラーさせたいの?

以上。


引用返信 編集キー/
■47119 / inTopicNo.3)  Re[1]: ExecuteNonQueryに関して
□投稿者/ やじゅ (1533回)-(2010/02/18(Thu) 17:49:30)
やじゅ さんの Web サイト
No47115 (SEELE さん) に返信
> 全く同じデータ(重複するデータ)を登録しようとすると
> テーブル1は以下※のExceptionを返してくれるのですが、
> テーブル2はExceptionを返してくれません。
> PRIMARY KEY 違反。オブジェクト 'dbo.TEST1' には重複したキーを挿入できません。

違いは、データとして重複してはならないキーを設定しているのかどうか
テーブル1は、PRIMARY KEY が設定されている。
テーブル2は、PRIMARY KEY が設定されていない。

引用返信 編集キー/
■47121 / inTopicNo.4)  Re[2]: ExecuteNonQueryに関して
□投稿者/ SEELE (2回)-(2010/02/18(Thu) 17:55:54)
No47117 (オショウ さん) に返信
> ■No47115 (SEELE さん) に返信

言葉足らずで申し訳ございません。
テーブル1、テーブル2ともに以下のような設定です。

Colomun1(Key)
Colomun2(Key)
Colomun3(Key)
Colomun4(Key)
Colomun5
Colomun6
Colomun7
Colomun8
Colomun9
Colomun10

Colomun569

Colomun5〜569はNULL OKです。

SQL文にColomun1〜4に全く同じパラメータを設定して、
各テーブルに2度ずつ実行した結果、
1はExceptionを発生しますが、2は0件でかえってきます。

その原因がわからなく掲示板に記載させて頂きました。

本当に言葉足らずで申し訳ありません。
引用返信 編集キー/
■47124 / inTopicNo.5)  Re[3]: ExecuteNonQueryに関して
□投稿者/ みきぬ (796回)-(2010/02/18(Thu) 18:10:49)
結果が0件ねえ…。UPDATEならわかる(更新が空振り)けど、INSERT であり得るのだろうか?
思いつくのは、例外が発生しているけど握りつぶしていた、とか。

そうでなければ、違いを探していくしかないんじゃない?

・2つのテーブルは、同一データベース上に存在するか?
・テーブルのレイアウトは同じか? ← 現状ここしか分からない
・接続文字列は同じか?
・処理の内容は、投げるクエリが異なるだけで後はまったく同じか?
・INSERTクエリは、テーブル名が異なるだけで後はまったく同じか?

などなど。
引用返信 編集キー/
■47127 / inTopicNo.6)  Re[4]: ExecuteNonQueryに関して
□投稿者/ SEELE (3回)-(2010/02/18(Thu) 18:27:58)
ちなみに以下のようなコーディングとなっております。
デバッグで実行しながら確認しております。
CommandTextのコメントアウトを活性非活性し、
テーブル1と2を使い分けております。

class Program
{
public Program()
{
}

static void Main(string[] args)
{
new Program().aaa();
}

private void aaa()
{
SqlTransaction tr = null;
SqlCommand cmd = null;
int intRecCnt = 0;

using (SqlConnection conn = new SqlConnection("Server=SQLSERVER;database=DATABASE;Connect Timeout=5;User ID=id;Pwd=pwd"))
{
conn.Open();

try
{
using (tr = conn.BeginTransaction(IsolationLevel.ReadCommitted))
{
cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.Transaction = tr;
cmd.CommandText = "INSERT INTO TEST1(Column1, Column2, Column3, Column4) VALUES(@Column1, @Column2, @Column3, @Column4)";
//cmd.CommandText = "INSERT INTO TEST2(Column1, Column2, Column3, Column4) VALUES(@Column1, @Column2, @Column3, @Column4)";
cmd.Parameters.Add(new SqlParameter("Column1", "000001"));
cmd.Parameters.Add(new SqlParameter("Column2", "1"));
cmd.Parameters.Add(new SqlParameter("Column3", "1"));
cmd.Parameters.Add(new SqlParameter("Column4", "1"));
intRecCnt = cmd.ExecuteNonQuery();
tr.Commit();
}
}
catch (Exception ex)
{
Console.WriteLine("登録エラー" + ex);
}
}
}
}

引用返信 編集キー/
■47135 / inTopicNo.7)  Re[5]: ExecuteNonQueryに関して
□投稿者/ Jitta on the way (560回)-(2010/02/18(Thu) 19:01:39)
No47127 (SEELE さん) に返信

まずは、SQL を直に実行して、データベースがどういう反応をするか、確認して下さい。
引用返信 編集キー/
■47159 / inTopicNo.8)  Re[6]: ExecuteNonQueryに関して
□投稿者/ SEELE (4回)-(2010/02/19(Fri) 13:27:21)
No47135 (Jitta on the way さん) に返信
> ■No47127 (SEELE さん) に返信
>
> まずは、SQL を直に実行して、データベースがどういう反応をするか、確認して下さい。
SQL Server Management Studio Expressにて、実行してみましたところ、
テーブル1はやはり重複でエラーとなりますが、テーブル2は以下のようになりました。

重複したキーが無視されました。
(0 行処理されました)

そこで「重複したキーが無視されました。」をキーワードに検索してみましたところ、
オブジェクトエクスプローラでテーブルを展開すると「インデックス」というフォルダがありますが、
その中にあるファイルのプロパティ→オプションタブ内にある重複した値を無視するというチェックボックスが
チェックされた形でした。

原因がわかり非常に満足しています。

オショウ様
やじゅ様
みきぬ様
Jitta on the way様

ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -