- PR -

SQLのUPDATEでデータベースが更新されません。

投稿者投稿内容
菜啼
会議室デビュー日: 2009/01/16
投稿数: 4
投稿日時: 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…返却済み

となっております。


どの部分を載せたら良いのか分からないので全て載せました。
長文すいません…。
ご教授の程、よろしくお願いします。

さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 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
投稿数: 4
投稿日時: 2009-01-16 12:18

さかもと様

早速のご返答ありがとうございます。

貼り付けるときにEnd Subは抜けてしまっていますが
これで全てです。
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2009-01-16 12:25
ソースを出す前に 段階的に処理はおいかけたのでしょうか?
SQLの単体テストやレコードの値の確認
あるいは自動コミットされていないとか
DBの接続先が異なるとかOKなの
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-01-16 15:13
沢山言いたい事のあるコードですが・・・。

とりあえず約十名の開発者が見ても
おかしい所見当たりません的なコードにはなっているんですよね?

まず
コード:
"UPDATE 蔵書 SET 判定 = 3 WHERE (蔵書ID = txtLibId1.text)"

この SQL っておかしくないですか?

コード:
"UPDATE 蔵書 SET 判定 = 3 WHERE (蔵書ID = " & txtLibId1.text & ")"

では?
こうしても SQL インジェクション的に問題あると思いますけど。
未記入
会議室デビュー日: 2009/01/17
投稿数: 7
投稿日時: 2009-01-17 13:58
http://d.hatena.ne.jp/busaikuro/20081209#c1232078169
菜啼
会議室デビュー日: 2009/01/16
投稿数: 4
投稿日時: 2009-01-19 14:16
コメントを下さった皆様ありがとうございます。
返答が遅くなってしまい申し訳ありません。



七味唐辛子様

ご返答ありがとうございます。

レコードの値は1度実行する毎に確認しています。
自動コミットは他の機能では行われているようなのです。
接続先も合っています。



King様

ご返答ありがとうございます。

十名とは言っても分担して作っているので実質は三名ほどしか関わっていません…。
誤解されてしまう様な書き方をして申し訳ありませんでした。

ご指摘ありがとうございます。
ご指摘通りに書いてみたのですが、
【SQLの実行エラーです。
エラーソース:.Net sqlClient Data Provider
エラーメッセージ:列名'& txtLibId1.text &'は無効です。】
と出てしまいました。




 様

名前が空白なのでなんとお呼びすればよいか分かりませんが…。

参考になるサイトをわざわざ載せて下さったのかと思い、行ってみたのですが。

NECその他企業様のご名誉の為に書かせて頂きますが、
私どもはNECその他企業様とは一切関係ありません。

rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2009-01-19 14:32
引用:

菜啼さんの書き込み (2009-01-16 12:00) より:

現在、十名程で図書館の貸出システムを作っているのですが
返却の部分で行き詰まってしまいました。


よくわかりませんが、貸出部分の処理はできているのですか?
そうであれば、その処理をまねっこすればよいと思うのですが。

引用:

菜啼さんの書き込み (2009-01-19 14:16) より:

ご指摘通りに書いてみたのですが、
【SQLの実行エラーです。
エラーソース:.Net sqlClient Data Provider
エラーメッセージ:列名'& txtLibId1.text &'は無効です。】
と出てしまいました。


指摘の通り書いていなかったりして。

スキルアップ/キャリアアップ(JOB@IT)