質問編集履歴
3
コード一部修正
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 =
|
74
|
+
If result IsNot "" Then ret = CStr(result)
|
75
75
|
|
76
76
|
connection.Close()
|
77
77
|
|
2
実装環境記載、テーブル構成追記
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
SQLserverのdate型データとVBで取得した日付を比較したい
|
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
|
+
]
|
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
|
-
|
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
コードの一部修正、タイトルに現在のエラーメッセージ記載。
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 = "今日のデータはすでに格納されています"
|
39
|
+
LblMsg.Text = "今日のデータはすでに格納されています"
|
36
40
|
Else
|
37
|
-
LblMsg.Text = "大丈夫!"
|
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("○○○○○○
|
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
|
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
|
70
|
+
Dim result As String = ""
|
67
71
|
result = command.ExecuteScalar()
|
68
72
|
|
69
|
-
If result IsNot
|
73
|
+
If result IsNot "" Then ret = CInt(result)
|
70
74
|
|
71
75
|
connection.Close()
|
72
76
|
|