teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

コード一部修正

2016/09/08 05:32

投稿

taketake221
taketake221

スコア17

title CHANGED
File without changes
body CHANGED
@@ -71,7 +71,7 @@
71
71
  Dim result As String = ""
72
72
  result = command.ExecuteScalar()
73
73
 
74
- If result IsNot "" Then ret = CInt(result)
74
+ If result IsNot "" Then ret = CStr(result)
75
75
 
76
76
  connection.Close()
77
77
 

2

実装環境記載、テーブル構成追記

2016/09/08 05:32

投稿

taketake221
taketake221

スコア17

title CHANGED
@@ -1,1 +1,1 @@
1
- SQLserverのdate型データとVBで取得した日付を比較したい(String "2016/09/08" から型 'Integer' への変換は無効です、のエラーが発生しています)
1
+ SQLserverのdate型データとVBで取得した日付を比較したいです
body CHANGED
@@ -1,5 +1,7 @@
1
- 初級者です。初歩的な質問ですが、よろしくお願いします。
1
+ 初級者です。ASP.NET Webフォームアプリに関する質問です。初歩的なことですが、よろしくお願いします。
2
2
 
3
+ ※OSはWindows7、.NET Framework4、Visual Stdio 2010、SQLserver2012、IE11を利用しています。
4
+
3
5
  テーブルからdate型のデータを(SQLserver2012を使用)取得し、
4
6
  VB側の構文「Dim dtToday As DateTime = Date.Today」で取得した日付と比較、
5
7
  同日なら処理Aを、日付が異なるなら処理Bを実行するようコードを記述したいと考えています。
@@ -12,17 +14,16 @@
12
14
  現在の格納内容でいえば、取得されるべきは「valueID」が「6」のレコードの「2016-09-08」の部分。
13
15
  (SQL構文で「FacilityID」を「1」と指定した場合)
14
16
 
17
+ <テーブルの構成>
18
+ ![イメージ説明](b7ac8643c5a20d584a53f605bcfa08ad.png)]
19
+
15
20
  現在のコードでは、双方で取得された日付が異なった場合の処理Bが実行されている状態にあります。
16
21
 
17
22
  こちら([date (Transact-SQL)](https://msdn.microsoft.com/ja-jp/library/bb630352.aspx))に多少目を通しながらコードを記述してみたのですが、やはりSQLserverに格納されているデータの型や記述方式と、VB側で取得する日付の記述方式が異なる、といったような点が原因なのでしょうか。
18
23
 
19
- ※「If day Like dtToday.ToString() Then」の部分は、演算子を「=」でも試しました。
20
- また、「dtToday」データ型を変換すため「.ToString() 」を付与しました。
24
+ ※DateDiff 関数というもがあと別方面で教えいただきました。
25
+ そちらを利用したコードだとどのように書けばよいのかも教えていただけるとありがたいです。
21
26
 
22
- SQL構文に記述ミスがあったので修正。
23
- ブレークポイントを設定し、ステップイン機能で検証してみると、
24
- 例外処理が生じており「String "2016/09/08" から型 'Integer' への変換は無効です」と表示されていました。
25
-
26
27
  ```Visual Basic
27
28
  Imports System.Data.SqlClient
28
29
 

1

コードの一部修正、タイトルに現在のエラーメッセージ記載。

2016/09/08 03:25

投稿

taketake221
taketake221

スコア17

title CHANGED
@@ -1,1 +1,1 @@
1
- SQLserverのdate型データとVBで取得した日付を比較するプログラムを記述したいです
1
+ SQLserverのdate型データとVBで取得した日付を比較したい(String "2016/09/08" から型 'Integer' への変換は無効です、のエラーが発生しています)
body CHANGED
@@ -19,6 +19,10 @@
19
19
  ※「If day Like dtToday.ToString() Then」の部分は、演算子を「=」でも試しました。
20
20
  また、「dtToday」のデータ型を変換するため「.ToString() 」を付与してみました。
21
21
 
22
+ SQL構文に記述ミスがあったので修正。
23
+ ブレークポイントを設定し、ステップイン機能で検証してみると、
24
+ 例外処理が生じており「String "2016/09/08" から型 'Integer' への変換は無効です」と表示されていました。
25
+
22
26
  ```Visual Basic
23
27
  Imports System.Data.SqlClient
24
28
 
@@ -32,9 +36,9 @@
32
36
  Dim dtToday As DateTime = Date.Today
33
37
 
34
38
  If day Like dtToday.ToString() Then
35
- LblMsg.Text = "今日のデータはすでに格納されています" '処理A
39
+ LblMsg.Text = "今日のデータはすでに格納されています"
36
40
  Else
37
- LblMsg.Text = "大丈夫!" '処理B
41
+ LblMsg.Text = "大丈夫!"
38
42
  End If
39
43
 
40
44
  End Sub
@@ -45,28 +49,28 @@
45
49
  Dim ret As String = ""
46
50
 
47
51
  Dim cnStr As String = System.Configuration.ConfigurationManager.
48
- ConnectionStrings("○○○○○○○○ConnectionString").ConnectionString
52
+ ConnectionStrings("○○○○○○ConnectionString").ConnectionString
49
53
 
50
54
  Using connection As New SqlConnection(cnStr)
51
55
 
52
56
  Dim SQL As String
53
- '特定のFacilityIDの日付が最新のレコードを参照
54
57
  SQL = "SELECT date" &
55
58
  " from tbl_valueTest as A" &
56
59
  " WHERE Exists(SELECT * from tbl_valueTest" &
57
60
  " group by FacilityID" &
58
- " having hotel_ID = A.FacilityID and MAX(date) = A._date)" &
61
+ " having FacilityID = A.FacilityID and MAX(date) = A.date)" &
59
62
  " and FacilityID = 1 "
60
63
 
61
64
  Dim command As New SqlCommand(SQL, connection)
62
65
 
63
66
  Try
67
+
64
68
  connection.Open()
65
69
 
66
- Dim result As Object = Nothing
70
+ Dim result As String = ""
67
71
  result = command.ExecuteScalar()
68
72
 
69
- If result IsNot Nothing Then ret = CInt(result)
73
+ If result IsNot "" Then ret = CInt(result)
70
74
 
71
75
  connection.Close()
72
76