現在、VB.NETにてアプリを作成しております。
そこでデータベースに接続し、指定の行を削除するSQL文を実行しているのですが、コンパイルエラー無しで実行が完了します。
がしかし、データベースからデータが削除されません。
ソースコードの内容にも問題が見つからず、どうにか救いの手を差し伸べていただけますと幸いです。
「実際のソースコード」
Private Sub deleteAdd() Try Dim empList As New ArrayList Dim empName As New ArrayList Dim St As String Dim Cn As New System.Data.SqlClient.SqlConnection Dim SQL As SqlClient.SqlCommand Dim ServerName As String = Form1.db_connection(1) 'サーバー名(またはIPアドレス) Dim DatabaseName As String = Form1.db_connection(2) 'データベース Dim Integrated_Security As String = Form1.db_connection(3) 'セキュリティコード St = "Server=" & ServerName & ";Initial Catalog=" & DatabaseName & ";Integrated Security=" & Integrated_Security & ";" Cn.ConnectionString = St Cn.Open() SQL = Cn.CreateCommand SQL.Connection = Cn SQL.CommandType = CommandType.Text SQL.CommandText = "DELETE FROM SJOYC_STF WHERE STF_FNAME = '" & TextBox1.Text & "'" SQL.ExecuteNonQuery() SQL.Dispose() Cn.Close() Cn.Dispose() TextBox1.Text = "" Catch ex As Exception MsgBox("データベースへの接続に失敗しました。", MsgBoxStyle.Exclamation) End Try End Sub
コードは ``` と ``` で囲ってください。インデントされて見やすくなりますので。回答者・閲覧者に見てもらわないと話が始まらないのですから、見てもらえる努力をしましょう。
あと、あなたの開発環境(OS, .NET, Visual Studio, DB サーバーのバージョン・エディションなど)を書いてください。
急ぎでと書かれても知りません。要件とも関係ないので削ってください。
急ぎだからと質問内容を手抜きしていいわけではありません。そのぶん時間を浪費するだけです。急がば回れ。
むしろ急いでいることを伝えることで通常は足が遠退きます。
はい、そうですね。以後気を付けます。
がしかし、回答内容に質問内容への指摘をしている時点で回答内容として不適切であり、むしろそちらの方が「回答内容を手抜きしている状態」に近しいのでは?
自分が発した批判は、必ず自分に返ってくるという超基本的な世の原理を理解してから、健全なプラットフォームの利用に徹しましょうね。
急ぐならお金を払って助っ人を呼びましょう。
勘違いされてるようですが
こちらは「質問への追記・修正選択の依頼」のコメント欄です。
回答でもなんでもありません。質問内容の不備や追記してほしいことを回答者がコメントする欄ですよ。
指摘されたことに対しては質問を編集して対応するのが通常の利用の仕方です。
'''で囲ってみたのですが、インデントが修正されません。
一体これはなぜ、修正されないのでしょうか・・・・・・・・・・・。
質問者さんが書かれた ' は「シングルクォート」
SurferOnWwwさんの書かれた ` は「バッククォート」です。
もし分からないのであればコード部分を選択し<code>ボタンを押してください。「コードブロック」と呼ばれるものです。
また「【急募】」はタイトルから削除してください。
大変失礼致しました。
こちらの勘違いであり、利用経験が短いこともあり、規則やマナーを理解しておらず、モラルに欠けた発言をしてしまったことを、この場を借りて謝罪いたします。
ヘルプは一読されたほうが良いでしょう。
https://teratail.com/help
質問や回答を見やすくするための「マークダウン」機能の紹介やPCからだと右側に「質問するときのヒント」がありますので。
インデントを修正しました。
厳しいご指摘をいただきまして、誠にありがとうございました。
COMMITが追加されていません。
えすぱあきぼんぬではまともなコメントは付きません。
commitを追加していないのは、無しでも他のFormは正常に実行されるからなのですが、この認識は間違いでしょうか?
試しに先ほどcommitを追加してみたところ、やはり削除されませんでした。
あなたの開発環境(OS, .NET, Visual Studio, DB サーバーのバージョン・エディションなど)を書いてください・・・とお願いしましたが無視ですか?
特に DB サーバーのバージョン・エディションは重要で、例えば LocaDB ですと照合順序の問題で N プレフィックスを付けないと日本語はダメということがあるのですよ。
・OSはWindows
・VB.NETを使用
・Microsoft SQL server Management studio 18
になります。
話が通じてないようです。SQL Server のバージョン・エディションは何ですか?
10.16.1000です。
基本的に質問に追記してください
こちらのコメント欄はデフォルト非表示であるため必ず目につくわけではありません
たいていの回答者は質問だけ読んで回答します
> 10.16.1000です。
そういうバージョンは自分の知る限り無いと思うのですが。以下の記事を参考に調べられませんか?
https://sql-oracle.com/sqlserver/?p=208
エディションも書いてください。エディションというのが何かは下記の記事参照。
https://ja.wikipedia.org/wiki/Microsoft_SQL_Server
それから、OS, .NET, Visual Studio のバージョンが何かについても答えられていませんよ。
SSMS からコマンドで DELETE できたそうですが、その時のコマンドと、コードの SQL.CommandText は全く同じか、デバッグして調べてみてください。
その前に、WHERE 句を付けない単純な SELECT クエリなら問題なく実行され結果も期待通りになるのか教えてください。
ちょっと本題から外れますが、クエリはパラメータ化しましょう。SQL インジェクション防止に必須です。あと、副次的な効果として、照合順序の問題で N プレフィックスを付けなければダメと言うところも、パラメータ化すれば問題なくなります。
そもそも、個人的には、パラメータ化してないクエリは議論の対象外と思っています。
他のメソッドでは、まったく同じ接続文字列を使用してデータベースからテーブルを取得して表示ができているため、DELETE文だけが実行できないという状態です。
他の質問にも答えてください。
タイトルの「急募」を削除する気はなしですか?
