私はインターネットの奥深くを検索してきましたが、私が見つけたすべての解決策はこの問題を解決しませんでした.
VB を使用して、SQL Server 2008 で Visual Web Developer 2010 Express を使用しています。
ID が存在しない場合は、テキスト ボックスに指定された ID と現在の日付 (time_scanned_in) の両方を挿入します (ID が既に存在する場合)。 、列に現在の日時を挿入[time_scanned_out]
し、データベースの3つのフィールドすべてがいっぱいの場合、 を返し@message = 1
ます。
SQL ストアド プロシージャは次のとおりです。
ALTER PROCEDURE dbo.InsertDateTime
@barcode_id nchar(20),
@message char(1) = 0 Output
AS
BEGIN
if not exists(select * from tblWork where barcode_id = @barcode_id)
begin
INSERT INTO [tblWork] ([barcode_id], [time_scanned]) VALUES (@barcode_id, GetDate())
end
else if exists(select * from tblWork where barcode_id = @barcode_id AND time_scanned_out IS NOT NULL )
begin
SET @message=1
end
else if exists(select * from tblWork where barcode_id = @barcode_id AND time_scanned_out IS NULL)
begin
UPDATE [tblWork] SET [time_scanned_out] = GetDate() WHERE [barcode_id] = @barcode_id
end
RETURN @message
end
これを (SP を右クリックして) 実行すると、問題なく動作し、すべてのフィールドが入力されると値が返されます。
しかし、vb コードで実行すると、そのような手順が見つからず、タイトルにエラーが表示されます。
VBコードは次のとおりです。
Dim opconn As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
Dim sqlConnection1 As New SqlConnection(opconn)
Dim cmd As New SqlCommand
Dim returnValue As Object
cmd.CommandText = "InsertDateTime"
cmd.CommandType = CommandType.StoredProcedure
cmd.Connection = sqlConnection1
sqlConnection1.Open()
With cmd.Parameters.Add(New SqlParameter("@barcode_id", TextBox.Text))
End With
With cmd.Parameters.Add(New SqlParameter("@message", SqlDbType.Char, 1, Label3.Text))
End With
returnValue = cmd.ExecuteScalar()
sqlConnection1.Close()
リターン部分のコードはまだ作成していないことに注意してください。SPを見つけるために取得したら、コードを作成します。
グリッドビュー内の各データベースの sys.objects.name を持つすべてのオブジェクトを一覧表示しようとしましたが、必要なストアド プロシージャ以外はすべて一覧表示されました。
これはなぜですか、何かアイデアはありますか?解決策を見つけるのに何時間も費やしました。さらにコードや情報が必要な場合は、お気軽にお問い合わせください。