- - PR -
SQLのUPDATEでデータベースが更新されません。
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-01-16 12:00
お世話になります。 現在、十名程で図書館の貸出システムを作っているのですが 返却の部分で行き詰まってしまいました。 Visual Web Developer 2005 Express Editionを使って開発しています。 フォーム上に 蔵書ID [txtLibId] 蔵書名 [txtLibName] ふりがな[txtLibKana] 著者名 [txtWriterName] ふりがな[txtWriterKana] (返却) ※蔵書IDなどの文字はラベル []はテキストボックス、[]内はテキストボックスの名前 (返却)はボタン とあり、[txtLibId]にバーコードリーダを使ってISBNコードを読み、(返却)を押すと 登録されている蔵書IDが[txtLibId]に表示され、他の[]も表示される仕様になっています。 そしてもう一度、(返却)を押すとSQLのUPDATEによりマスタが (貸出状態から貸し出し可能状態へ)更新されるという風にしたいのですが、 マスタが更新されず困っております。 以下コードです。 Partial Class frmReturn Inherits System.Web.UI.Page Dim str(30000, 6) As String Dim arguments As DataSourceSelectArguments Dim dtView As Data.DataView Dim dtRowView As Data.DataRowView Dim upd As SqlDataSource Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load txtLendDate.Text = Microsoft.VisualBasic.DateValue(Now) Dim i As Integer = 0 Dim f As Integer = 0 arguments = New DataSourceSelectArguments dtView = Me.SQLReturn.Select(arguments) For Each dtRowView In dtView str(i, 0) = dtRowView("ISBN") str(i, 1) = dtRowView("蔵書ID") str(i, 2) = dtRowView("書名") str(i, 3) = dtRowView("ふりがな") str(i, 4) = dtRowView("著者名") str(i, 5) = dtRowView("Expr1") i += 1 Next i = 0 End Sub Protected Sub btnReturn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnReturn.Click Dim i As Integer = 0 Dim f As Integer = 0 arguments = New DataSourceSelectArguments dtView = Me.SQLReturn.Select(arguments) If Session("RFLG") = 0 Then For Each dtRowView In dtView If Trim(txtLibId.Text) = Trim(str(i, 0)) Then txtLibId.Text = Trim(str(i, 1)) txtLibName.Text = Trim(str(i, 2)) txtLibKana.Text = Trim(str(i, 3)) txtWriterName.Text = Trim(str(i, 4)) txtWriterKana.Text = Trim(str(i, 5)) End If i += 1 Session("RFLG") = 1 Next ElseIf Session("RFLG") = 1 Then txtLibId.Text = "" txtLibName.Text = "" txtLibKana.Text = "" txtWriterName.Text = "" txtWriterKana.Text = "" Call update() Session("RFLG") = 0 End If End Sub Public Sub update() upd = New SqlDataSource upd.ConnectionString = "Data Source=06NECMATE4-205;Initial Catalog=JOL;Persist Security Info=True;User ID=1192116;Password=1192116" upd.UpdateCommand = "UPDATE 貸出サブ SET フラグ = 1 WHERE (蔵書ID = txtLibId1.text) AND (フラグ = 0)" upd.UpdateCommand = "UPDATE 蔵書 SET 判定 = 3 WHERE (蔵書ID = txtLibId1.text)" テーブルは 蔵書 |蔵書ID| |ISBN| |図書館ID| |棚ID| |判定| |持出禁止| |入庫日| 貸出サブ |貸出ID| |蔵書ID| |司書ID| |フラグ| となっており、 判定は 0…貸出中 1…予約あり 2…貸出中で予約あり 3…貸出可能 フラグは 0…貸出中 1…返却済み となっております。 どの部分を載せたら良いのか分からないので全て載せました。 長文すいません…。 ご教授の程、よろしくお願いします。 | ||||||||
|
投稿日時: 2009-01-16 12:12
さかもとと申します。
Public Sub update() upd = New SqlDataSource upd.ConnectionString = "Data Source=06NECMATE4-205;Initial Catalog=JOL;Persist Security Info=True;User ID=1192116;Password=1192116" upd.UpdateCommand = "UPDATE 貸出サブ SET フラグ = 1 WHERE (蔵書ID = txtLibId1.text) AND (フラグ = 0)" upd.UpdateCommand = "UPDATE 蔵書 SET 判定 = 3 WHERE (蔵書ID = txtLibId1.text)" はこれで全てですか? _________________ ------------------------------------------ 拝啓、さかもとと申します♪ | ||||||||
|
投稿日時: 2009-01-16 12:18
さかもと様 早速のご返答ありがとうございます。 貼り付けるときにEnd Subは抜けてしまっていますが これで全てです。 | ||||||||
|
投稿日時: 2009-01-16 12:25
ソースを出す前に 段階的に処理はおいかけたのでしょうか?
SQLの単体テストやレコードの値の確認 あるいは自動コミットされていないとか DBの接続先が異なるとかOKなの | ||||||||
|
投稿日時: 2009-01-16 15:13
沢山言いたい事のあるコードですが・・・。
とりあえず約十名の開発者が見ても おかしい所見当たりません的なコードにはなっているんですよね? まず
こうしても SQL インジェクション的に問題あると思いますけど。 | ||||||||
|
投稿日時: 2009-01-17 13:58
http://d.hatena.ne.jp/busaikuro/20081209#c1232078169
| ||||||||
|
投稿日時: 2009-01-19 14:16
コメントを下さった皆様ありがとうございます。
返答が遅くなってしまい申し訳ありません。 七味唐辛子様 ご返答ありがとうございます。 レコードの値は1度実行する毎に確認しています。 自動コミットは他の機能では行われているようなのです。 接続先も合っています。 King様 ご返答ありがとうございます。 十名とは言っても分担して作っているので実質は三名ほどしか関わっていません…。 誤解されてしまう様な書き方をして申し訳ありませんでした。 ご指摘ありがとうございます。 ご指摘通りに書いてみたのですが、 【SQLの実行エラーです。 エラーソース:.Net sqlClient Data Provider エラーメッセージ:列名'& txtLibId1.text &'は無効です。】 と出てしまいました。 様 名前が空白なのでなんとお呼びすればよいか分かりませんが…。 参考になるサイトをわざわざ載せて下さったのかと思い、行ってみたのですが。 NECその他企業様のご名誉の為に書かせて頂きますが、 私どもはNECその他企業様とは一切関係ありません。 | ||||||||
|
投稿日時: 2009-01-19 14:32
よくわかりませんが、貸出部分の処理はできているのですか? そうであれば、その処理をまねっこすればよいと思うのですが。
指摘の通り書いていなかったりして。 |