• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C# sqlserver 2005 vs2005 DB追加時重複ID禁止(2))

C# sqlserver 2005 vs2005 DB追加時重複ID禁止

このQ&Aのポイント
  • ユーザ管理画面編集時に重複したID列を追加禁止としたいのですが、datasetを使って、回すと件数が多くなったときに時間がかかってしまうので、SQLCOMMANDを使用使用と思っております。SQLCOMMANDにはどのような指定を行ったらよいですか。
  • 処理時間の問題から、datasetを使わずにSQLCOMMANDを使用して重複IDの追加を禁止したいです。指定すべきSQLCOMMANDの内容を教えてください。
  • 重複IDの追加を禁止するためには、datasetではなくSQLCOMMANDを使用する必要があります。適切なSQLCOMMANDの指定方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

普通は SQL文にて WHERE句を追加して該当行があるのかどうかをチェックするのが妥当な選択かと思われます 別のアプローチとして DataSetに取り込んだDatTableのSelectメソッドで抽出したDataRowコレクションを探索するといった方法でしょう ただし、DataSetをFillなどで最新状態にしてから実行した方がいいでしょう データ量が増えた場合Fillする時間がもったいないかもしれませんが SELECT * FROM テーブル名 WHERE UserID='抽出対象のID' といったSQL文になると思います VS.NETのサーバーエクスプローラから クエリを作成して希望するデータの取得をどのようにしたら出来るか確認してみましょう

t_kanegon
質問者

お礼

redfox63さん ありがとうございます。正直質問してすっかり忘れていました。 >別のアプローチとして DataSetに取り込んだDatTableのSelectメソッドで抽 >出したDataRowコレクションを探索するといった方法でしょう selectメソッドですね。了解しました。datarowをの数をかぞえる ということですね。 >ただし、DataSetをFillなどで最新状態にしてから実行した方がいいでしょう >データ量が増えた場合Fillする時間がもったいないかもしれませんが 了解しました。ちょっと今はコーディングできないのですが、 そのうち試したいと思います。 今後ともよろしくおねがいしま(__)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C# vs2005 sqlserver2005 USERID列重複禁止 windows appli

    こんばんは。 標記の件で勉強しています。 string userid = textBox1.Text; に値を入力しボタンするとDBにinsertして、その際に同じUserID(DB上の)をinsertできないようにしたいのですが、下記ソースでうまくいきません。 下記はDBのUserIDをforeachでグルグル回して、そこにtextBox1に入力した 値と同じであれば、処理を中断したいのですが、まず、「colは繰り返し変数であるため割り当てることができません」と怒られます。 しかもぐるぐる回ると思われた、foreachが1回しか回らずに内容はDBの 列名である「UserID」が代入されてしまいます。 下記ソースは重複チェックの部分のみです。 SqlDataAdapter da = new SqlDataAdapter("SELECT UserID FROM user_master", cnc); // データをキャッシュする DataSet のインスタンスを作成する DataSet ds = new DataSet(); // データセットにデータを読み込む da.Fill(ds, "user_master"); foreach (DataColumn col in ds.Tables["user_master"].Columns) { col = userid; } 以上宜しくお願いします。

  • データベースから情報の取得・更新・削除 visual studio2005 sqlserver2005 c# (3)

    こんにちは、カネゴンです。 標記の件で再度質問させていただきます。 データグリッドへの新レコードの追加です。 下記ソースで、まず「daをfillできません」となります。 パラメータあたりがおかしいのはわかっていますが、どのように直したらいいのやらわかりません。 次にこのページは、登録画面をnewして、別画面で表示しているのですが もちろんデータグリッドは別ページにあるため、「datagird1がありません」となります。 皆さんのお力をおかしください(__) 以上よろしくお願いします。 string StrConn = @" server = ***\SQL2005 ; " + " database =ser_master ; " + " uid = sa ; " + " pwd = *** ; "; SqlConnection cnc = new SqlConnection(StrConn); cnc.Open(); SqlCommand cmd = new SqlCommand("INSERT INTO [user_master]" + " ( UserID ,UserName , Password , Age , Salary , Sex ) VALUES " + " ( @userid , @username, @password, @age, @salary, @sex ", cnc); cmd.Parameters.AddWithValue("@userid", SqlDbType.VarChar); cmd.Parameters.AddWithValue("@username", SqlDbType.VarChar); cmd.Parameters.AddWithValue("@password", SqlDbType.VarChar); cmd.Parameters.AddWithValue("@age", SqlDbType.Int); cmd.Parameters.AddWithValue("@salary", SqlDbType.Int); cmd.Parameters.AddWithValue("@sex", SqlDbType.VarChar); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds, "user_master"); cnc.Close(); dataGridView1.DataSource = ds.Tables["user_master"];  

  • データベースから情報の取得・更新・削除 SQL2005 C# 2

    おはようございます。カネゴです。 表記の件で再度質問させていただきいます。 まずは情報取得。 これは、検索・抽出といったほうがいいのでしょうか。ID PASSを テキストボックスに入力し検索ボタンを押下すると、データベースから 検索結果に、マッチしたレコードがデータグリッドに表示されると いうものです。 sqlconnection sqlcomand. などを使用し sqldataadaptedのfill メソッドで表示させればいいのでしょが、なかなかうまくいきません… 更新削除も同様に、ado.netで行いたいのですが、なかなかうまくいきません。 「検索」btn押下後のイベントです。 SqlConnection cn = new SqlConnection(@" server = ***\SQL2005 ; " + " database = user_master ; " + " uid = sa ; " + " pwd = *** ; "); cn.Open(); SqlCommand cmd = new SqlCommand("SELECT * FROM user_master where UserID=textBox1.Text and Password=textBox2.Tet ", cn); SqlDataAdapter da = new SqlDataAdapter (); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds, "user_master"); cn.Close(); たぶん、select文のなかが違うと思います。 マルチパート識別子 "textBox1.Text" をバインドできませんでした。 マルチパート識別子 "textBox2.Text" をバインドできませんでした。 とエラーがでます。 素人なので、つぎはぎして作ったので、文法的なものがめちゃくちゃかもしれませんが 以上宜しくお願いします。

  • sqlserverに現在時刻を格納したいのですが、『':'付近に不適切

    sqlserverに現在時刻を格納したいのですが、『':'付近に不適切な構文があります。』 と出てしまい、格納されません。言語はVC#2008、データ型はtime(7),datetimeなど試しているのですがうまくいかないのです。orz 以下、コードです。 SqlConnection cn = new SqlConnection(@"Data Source=.\SQLEXPRESS; AttachDbFilename=F:\C#\MyDatabase.mdf; Integrated Security=true; Connect Timeout=30; User Instance=true"); DateTime dt = DateTime.Now; TimeSpan ts = dt.TimeOfDay; // 更新 int id = int.Parse(textBox2.Text); SqlCommand cmd = new SqlCommand( "UPDATE Product SET 時刻 = " + ts + " WHERE ID ='" +id.ToString()+"'", cn); cn.Open(); cmd.ExecuteNonQuery(); cn.Close(); 原因判りますでしょうか・・・ よろしくお願いします。

  • ASP.NET C# SQLパラメータ

    いつもお世話になっております。 グリッドビューから編集、更新キャンセルの機能を使っているところなのですが、更新ボタンのイベント(RowUpdating)からだとUpdateCommandに直接SQL文を入れないとうまく行きません。 UpdateCommand = "update .....";のようにです。 SqlConnection cn = new SqlConnection(接続文字列); SqlCommand cmd = new SqlCommand(SQL文, cn); SqlParameter sp1 = cmd.Parameters.Add("@パラメータ", SqlDbType.Int); SqlParameter sp2 = cmd.Parameters.Add("@パラメータ2", SqlDbType.VarChar); sp1.Value = 変数 sp2.Value = 変数 cn.Open(); cmd.ExecuteNonQuery(); cn.Close(); のようにパラメータを使いたいのですが、UpdateCommandに対するパラメータの設定のやり方がわかりません、教えてください!!

  • C#のSQL言語について教えてください。

    windowsフォーム上にデータベースのテーブルを載せて、 書き込むボタンを作り、その書き込み内容を書き込み直後にフォーム上のデータベースのテーブルに反映させたいと思っているのですが反映されません。コードが間違っていますでしょうか? これがソースです。 SqlConnection cn; SqlCommand cmd; cn = new SqlConnection(@"Data Source=.\SQLEXPRESS; AttachDbFilename=E:\開発用\入退室記録システム(接続から読取)\SampleApplicationByCS\Database1.mdf; Integrated Security=True; Connect Timeout=30; User Instance=True"); cmd = new SqlCommand("Select * From Product", cn); cn.Open(); //Table1の学籍番号00000001の行の授業開始の列に1と入力する。 cmd = new SqlCommand("UPDATE Table1 " + "SET 授業開始='1' WHERE 学籍番号=" + response.Comm[ix].TagData, cn); cmd.ExecuteNonQuery(); SqlTransaction st; st = cn.BeginTransaction("Table1"); cmd.Transaction = st; st.Commit(); cn.Close(); コミットはこれでいいのでしょうか? this.table1TableAdapter.Fill(this.database1DataSet.Table1); これを入れてもテーブルが更新されませんでした。

  • VB.Net SqlCommand 共通に

    お世話になります。 VB.Net 駆け出しの者です。 SqlCommand を使いストアドプロシジャーを実行して戻り値を DateSet にするような関数はプログラムを作っていくと、かなり多数になるようになりました。接続文字列だったり、いろいろ同じような記述が続いているなと思っておりました。 そこで、以下のような関数を作り、この部分を使いまわせないものかと思っております。 ストアドプロシジャーの名前や、そのほか必要な部分の文字はすべて変数にして、なんとか使えないのかなと思っているのですが、問題なのは、パラメータの部分でうまくいかないのです。 パラメータの部分だけ別関数にして、なんとかねじこめないかなと思っているのですが・・・ そもそもこういうやり方が正しいのかどうかもわからないのですが、その辺りも含めご教授いただければ幸いでございます。 何卒よろしくお願いいたします。 Public Function CommonDataSet(ByVal NameStored As String, ByVal CMDPara As SqlCommand, ByVal BasicTableName As String, ByVal ErrStr As String, ByVal ErrStrCaption As String) As DataSet     Dim SQLCon As SqlConnection = New SqlConnection(CMO.GetConnectStrings())     Try       CMDPara = New SqlCommand(NameStored, SQLCon)       CMDPara.CommandType = CommandType.StoredProcedure       SQLCon.Open()       Dim custDA As SqlDataAdapter = New SqlDataAdapter       Dim custDS As DataSet = New DataSet       ’この部分で下記の関数でパラメータを設定したいのですが、うまくいきません       custDA.SelectCommand = CMDPara       custDA.Fill(custDS, BasicTableName)       CommonDataSet = custDS     Catch ex As Exception       Err.Raise(Err.Number)       MessageBox.Show(ErrStr, ErrStrCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning)       CommonDataSet = Nothing     End Try     If SQLCon.State <> ConnectionState.Closed Then       SQLCon.Close()       SQLCon.Dispose()     End If End Function パラメータを設定する関数 上の関数の引数として設定したいのです  ByVal CMDPara As SqlCommand の部分のパラメータとして Private Function CommonPara(CMD As SqlCommand) As SqlCommand     CMD.Parameters.Clear()     CMD.Parameters.Add(New SqlParameter(パラメータ1の記述)     CMD.Parameters.Add(New SqlParameter(パラメータ2の記述)     CMD.Parameters.Add(New SqlParameter(パラメータ3の記述)     CommonPara = CMD End Function

  • VB2005 SQL INSERTについて

    VB2005 Express Editionを使用しています。レコードの追加を以下のように行っておりますが、追加されません。プログラミングの世界に入ったばかりでどこが違うのか全く分かりません。ご教授ください。また、参考になるサイトがあれば教えてください。 Dim Cn As New SqlConnection Cn.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename" & "=|DataDirectory|\Database1.mdf;Integrated Security=True;" & "User Instance=True" Dim cmd As New SqlCommand cmd.Connection = Cn cmd.CommandText = "INSERT INTO USER_ID (ユーザー名, パスワード) VALUES ('AAA', 'XXX')" Cn.Open() cmd.ExecuteNonQuery() Cn.Close()

  • Visual Studio 2005 Sql Server 2005 C#

    先輩方 こんばんは カネゴンです。 下記内容で困っています。 SqlConnection がオープンできません。 「SQL Server の既定の設定がリモート接続を許可しないようになっていることがエラーの原因 sql server」のエラーと 「**」はログインできませんでしたの表示がされ、かれこれ3日悩んでおります。 宜しくお願いします。 SqlConnection cn = new SqlConnection(@" Server = local ; Trusted_Connection = Yes ; Database = user_master ; uid = *** ; pwd = *** ; "); SqlCommand cmd = new SqlCommand("login_check", cn); cmd.CommandType = CommandType.StoredProcedure; SqlParameter p1 = new SqlParameter("@p1",             System.Data.SqlDbType.VarChar, 16); p1.Value = TextBox1.Text; SqlParameter p2 = new SqlParameter("@p2",             System.Data.SqlDbType.VarChar, 16); p2.Value = TextBox2.Text; cn.Open();

  • Insertできません

    どうしてもInsertできませんどこが間違っているのか教えてください。 Dim cn As New SqlConnection("workstation id=""ユーザー名?"";packet size=4096;user id=test;data source=server名;per" & _ "sist security info=True;initial catalog=テーブル名;Password=パスワード") Dim cmd As New SqlCommand("カラム1", cn) cmd.CommandType = CommandType.StoredProcedure 'cnst.CommandText = "INSERT INTO テーブル名(カラム1, カラム2, カラム3,カラム4) " & _ '"VALUES (@カラム1, @カラム2, @カラム3,@カラム4())" Dim p1 As SqlParameter = cmd.Parameters.Add("@カラム1", SqlDbType.VarChar, 20) p1.Value = TextBox1.Text Dim p2 As SqlParameter = cmd.Parameters.Add("@カラム2", SqlDbType.VarChar, 20) p2.Value = TextBox2.Text Dim p3 As SqlParameter = cmd.Parameters.Add("@カラム3", SqlDbType.VarChar, 20) p3.Value = Dropdownlist1.DataTextField Dim p4 As SqlParameter = cmd.Parameters.Add("@カラム4", SqlDbType.VarChar, 20) p4.Value = TextBox3.Text cn.Open() cmd.ExecuteNonQuery() cn.Close() SqlDataAdapter2.Fill(DataSet21) DataGrid1.DataBind() End Sub __________________________________________ __________________________________________