@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

テキストボックス内の時刻をSQL サーバーに登録するVBスクリプト

1
投稿者投稿内容
なり
常連さん
会議室デビュー日: 2006/06/19
投稿数: 32
投稿日時: 2006-06-22 17:18
こんにちは。初めて ASP.NET を扱っています、nariと申します。

以前は皆様に大変お世話になりました。
今度は、次のようなことをさせたいのですが、うまくいかずに、
悩んでいます。どなたか、ご存知の方がいらっしゃいましたら、
ご教示いただきたくお願いします。
会議室違いでしたら、ご教示いただきたく・・。

----使用環境
Windows Server 2003
.NET Framework 1.1
開発言語:VB.NET(WebMatrix を使用)

----やりたいこと----
ASP.NET のページをロード時に、テキストボックス(tokei)に現在時刻を入力。
このテキストボックスは、編集可能で、人の手で値を変更できる。
ボタン(Button1)を押したら、テキストボックスに入っている(変更後の)時刻を、SQL サーバーのテーブル(SQL サーバーの該当のカラムの型は Datetime です)に、送信する。

----書いてみたコード----
Sub Page_Load(sender As Object, e As EventArgs)
dim jikoku as datetime = system.date.now
tokei.text = jikoku
End Sub

Sub Button1_Click(sender As Object, e As EventArgs)
dim conn as new sqlconnection()
conn.ConnectionString = "data source=localhost;Initial_ Catalog=logs;Integrated Security=SSPI;"

dim cmd as New SqlCommand()
cmd.CommandText = "insert into test values (@Log_date)"
cmd.connection = conn

dim logdate0 as sqlparameter = cmd.parameters.add("@log_date",_ system.data.sqldbtype.datetime)
logdate0.value = datetime.parse(tokei.text)

conn.open()
cmd.ExecuteNonQuery()
conn.close()

End Sub

----実行すると----
SQL Server のテーブルの中が、ページをロードした時刻になる。
変更後の時刻は登録されず、登録件数は正常です。


テキストボックスの値を変更した後に、なにか処理をさせなければならないのかもしれませんが、このあたりがまったく想像がつきません。

お手数をおかけしますが、アドバイスいただけますと幸いです。
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-06-22 17:24
ボタン押下時に、Page_Load が実行されるからではないでしょうか。

追記 : ポストバックについて、調べてみてはいかがでしょうか。


[ メッセージ編集済み 編集者: ひろれい 編集日時 2006-06-22 17:27 ]
なり
常連さん
会議室デビュー日: 2006/06/19
投稿数: 32
投稿日時: 2006-06-22 17:49
ひろれいさん

ありがとうございます!
そういえば、入門書?を読んだときに、ポストバックについての記述がありました。。
再度読み直してみて、以下のようにコードを変更して解決しました。

大変お騒がせしました。そして、ありがとうございました。

----コード----

Sub Page_Load(sender As Object, e As EventArgs)
If Not IsPostBack Then
dim jikoku as datetime = system.date.now
tokei.text = jikoku
End If

End Sub

Sub Button1_Click(sender As Object, e As EventArgs)

dim conn as new sqlconnection()
conn.ConnectionString = "data source=localhost;Initial Catalog=logs;Integrated Security=SSPI;"

dim cmd as New SqlCommand()
cmd.CommandText = "insert into test values (@Log_date)"
cmd.connection = conn

dim logdate0 as sqlparameter = cmd.parameters.add("@log_date", system.data.sqldbtype.datetime)
logdate0.value = datetime.parse(tokei.text)

conn.open()
cmd.ExecuteNonQuery()
conn.close()

End Sub
なり
常連さん
会議室デビュー日: 2006/06/19
投稿数: 32
投稿日時: 2006-06-22 18:11
度々申し訳ありません。

以下のコードなのですが、
テキストボックスが空の場合、Null をデータベースに送るように設定したいのですが、現在、テキストボックスが空の場合、以下のエラーメッセージが、ボタン押下後に出てしまいます。

----エラーメッセージ----
System.FormatException: 文字列は有効な DateTime ではありませんでした。

SQL データベース側では、Null を許容しています。

どなたか、アドバイスいただけませんでしょうか。
よろしくお願いします。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-06-22 18:19
DBNull.Valueを設定してください。
なり
常連さん
会議室デビュー日: 2006/06/19
投稿数: 32
投稿日時: 2006-06-23 13:49
burton999さん

アドバイスありがとうございます。
=dbnull までは何とかたどり着いていたのですが、
式には使用できない、ようなメッセージで、失敗していました。

DbNull.value で検索して、使いかたを調べてみたところ、
無事に動作できるようになりました。

本当にありがとうございました。

1

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