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

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

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

Re[4]: DBの更新がうまくできません


(過去ログ 46 を表示中)

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

■24715 / inTopicNo.1)  DBの更新がうまくできません
  
□投稿者/ Pan (7回)-(2008/09/08(Mon) 17:21:27)

分類:[VB.NET/VB2005] 

vb2008/access2007
すいませんが、アドバイスいただけますでしょうか。

いま、Form1にTextBox1とButton1がひとつずつあります。
TextBox1になにか文字を入力して、Buttonをクリックした時に
その入力された内容をaccessに更新(反映)させたいと考えています。

accessにはテーブル名が → T_入力
     フィールド(列)名が → 文字列
     ID=1のところに入力するつもりです。
(これでaccess側では指定できていると思います)

以下がコードです。


Dim Cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=○○○.accdb;Persist Security Info=False;")
Dim SQLCm As OleDbCommand = Cn.CreateCommand
Dim a As String = TextBox1.Text

MsgBox(a)
SQLCm.CommandText = "UPDATE T_入力 SET 文字列='a' WHERE ID = 1"

Cn.Open()
SQLCm.ExecuteNonQuery()
Cn.Close()

Me.Hide()


しかし、実際に実行すると、指定した場所には a と入力されています。
文字列='a'→ 文字列=a に変更すると、SQLCm.ExecuteNonQuery()のところでエラーが発生します。

ネットでいろいろ調べてみたのですが、解決できません。
初歩的なことかもしれませんが、よろしくお願いします。


引用返信 編集キー/
■24716 / inTopicNo.2)  Re[1]: DBの更新がうまくできません
□投稿者/ たくボン (16回)-(2008/09/08(Mon) 17:33:45)
No24715 (Pan さん) に返信
> 文字列='a'→ 文字列=a に変更すると、SQLCm.ExecuteNonQuery()のところでエラーが発生します。

エラーの内容はどのようなものですか?
エラーが出ますだけでは回答しにくいですね。
引用返信 編集キー/
■24717 / inTopicNo.3)  Re[1]: DBの更新がうまくできません
□投稿者/ Hiro (3回)-(2008/09/08(Mon) 17:38:19)
No24715 (Pan さん) に返信
> SQLCm.CommandText = "UPDATE T_入力 SET 文字列='a' WHERE ID = 1"
>
> しかし、実際に実行すると、指定した場所には a と入力されています。
> 文字列='a'→ 文字列=a に変更すると、SQLCm.ExecuteNonQuery()のところでエラーが発生します。

文字列='a' でUPDATEしてますから「a」と何度実行しても同じになってしまうのでは?

文字列='"& a &"'でどうでしょうか?

引用返信 編集キー/
■24718 / inTopicNo.4)  Re[2]: DBの更新がうまくできません
□投稿者/ ぱると (1回)-(2008/09/08(Mon) 17:38:36)
SQLCm.CommandText = "UPDATE T_入力 SET 文字列='" & a & "' WHERE ID = 1"

引用返信 編集キー/
■24719 / inTopicNo.5)  Re[2]: DBの更新がうまくできません
□投稿者/ ロック (89回)-(2008/09/08(Mon) 17:43:49)
SQLを見る限り正しく更新されていますが
aの文字を任意の文字で更新したいんですよね?

というわけで、パラメタライズドクエリですね
「Parameters.Add」で検索すると色々出てくるかと
http://www.atmarkit.co.jp/fdotnet/basics/adonet03/adonet03_03.html
とか(毎回、ココを出してしまいます orz もっと良い所探しておこうかとも思っています)

引用返信 編集キー/
■24766 / inTopicNo.6)  Re[3]: DBの更新がうまくできません
□投稿者/ Pan (8回)-(2008/09/09(Tue) 12:57:32)
たくボンさん、Hiroさん、ぱるとさん、ロックさん返信ありがとうございます。


>エラーの内容はどのようなものですか?
>エラーが出ますだけでは回答しにくいですね。

情報不足ですいません。
”OleDbExceptionはハンドルされませんでした。”
”1 つ以上の必要なパラメータの値が設定されていません。”
と出ていました。


>文字列='a' でUPDATEしてますから「a」と何度実行しても同じになってしまうのでは?
>文字列='"& a &"'でどうでしょうか?

>SQLCm.CommandText = "UPDATE T_入力 SET 文字列='" & a & "' WHERE ID = 1"

この方法で入力した文字が正しく更新することができました。
しかし、なぜこのような記述になるのかまだ分かりません。
ただのaでもできそうなものなんですが(あくまで素人目線ですが)
'" & a & "'
追って勉強していきます。


>「Parameters.Add」で検索すると色々出てくるかと
Parameters.Add、調べてみます。
もっと幅広い知識を持つためにも
こうやって、新しいことを教えていただけることは、ほんとにありがたいことです。

みなさん、ありがとうございました。


解決済み
引用返信 編集キー/
■24768 / inTopicNo.7)  Re[4]: DBの更新がうまくできません
□投稿者/ ロック (90回)-(2008/09/09(Tue) 13:11:31)
2008/09/09(Tue) 13:11:56 編集(投稿者)

こう書くと分かるのでは?
SQLCm.CommandText = "UPDATE T_入力 SET 文字列='" + a + "' WHERE ID = 1"

>Parameters.Add、調べてみます。
では、合わせて「SQLインジェクション」についても調べると
色々分かりますので是非


#チェックし忘れました orz
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -