Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET-找不到存储过程_Asp.net_Vb.net_Sql Server 2008_Stored Procedures - Fatal编程技术网

ASP.NET-找不到存储过程

ASP.NET-找不到存储过程,asp.net,vb.net,sql-server-2008,stored-procedures,Asp.net,Vb.net,Sql Server 2008,Stored Procedures,我一直在搜索互联网的深度,我找到的所有解决方案都没有解决这个问题 我正在使用Visual Web Developer 2010 Express和SQL Server 2008,使用VB 我试图执行一个存储过程,将来自textbox控件的一些数据插入数据库,如果id不存在,它将同时插入textbox中给定的id和当前日期(time\u scanned\u in),如果id已经存在,它将在[time\u scanned\u out]列中插入当前日期时间,如果数据库中的所有3个字段都已满,它将返回@m

我一直在搜索互联网的深度,我找到的所有解决方案都没有解决这个问题

我正在使用Visual Web Developer 2010 Express和SQL Server 2008,使用VB

我试图执行一个存储过程,将来自textbox控件的一些数据插入数据库,如果id不存在,它将同时插入textbox中给定的id和当前日期(time\u scanned\u in),如果id已经存在,它将在
[time\u scanned\u 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列出gridview中每个数据库的所有对象,它列出了除所需存储过程之外的所有内容

为什么会这样,有什么想法吗?非常感谢,花了几个小时试图找到解决方案。 如果有人需要更多的代码或信息,请随时询问。

首先尝试cmd.parameters.clear(),然后开始在cmd对象中添加参数。另外,请尝试cmd.executescaler()或cmd.executesReader(),而不是cmd.executescaler()

 cmd.Parameters.AddWithValue("@barcode_id",  TextBox.Text)
 SqlParameter prmOut = cmd.Parameters.Add("@message",SqlDbType.Char, 1)
 prmOut.Value = Label3.Text
 prmOut.Direction = ParameterDirection.InputOutput

 cmd.ExecuteNonQuery()

 returnValue = prmOut.Value.ToString()

用一个全新的数据库重新创建了整个项目,复制了所有相同的代码,现在一切都完美无瑕!我仍然不知道出了什么问题,但谢谢大家,你们都很及时,知识渊博

以下是所有感兴趣的人的最终VB代码:

Dim myConnection As New SqlConnection(opconn)
Dim cmd As New SqlCommand()
Dim myReader As SqlDataReader

cmd.CommandType = CommandType.StoredProcedure
cmd.Connection = myConnection
cmd.CommandText = "InsertTimes"

cmd.Parameters.AddWithValue("@message", OleDbType.Integer)
cmd.Parameters.AddWithValue("@barcode_id", TextBox.Text)
cmd.Parameters("@message").Direction = ParameterDirection.Output

Try
    myConnection.Open()
    myReader = cmd.ExecuteReader()

    Dim returnMessage As String = cmd.Parameters("@message").Value
    If returnMessage = 1 Then
        label_confirmation.Text = "Record successfully submitted!"
        TextBox.Text = ""
    ElseIf returnMessage = 2 Then
        label_confirmation.Text = "A finish time already exists for the record '" & TextBox.Text & "', would you like to override the finish time anyway?"
        button_yes.Visible = True
        button_no.Visible = True
    ElseIf returnMessage = 3 Then
        label_confirmation.Text = "Record submitted, work operation status complete!"
        TextBox.Text = ""
    End If

Catch ex As Exception
    label_confirmation.Text = ex.ToString()
Finally
    myConnection.Close()
End Try

尝试
cmd.CommandText=“dbo.InsertDateTime”
多次尝试使用许多不同的前缀,包括那个前缀,尝试了我的用户名和所有内容,完全相同的错误。是否确实要连接具有此过程的数据库?尝试使用
cmd.ExecuteNonQuery()
(而不是
cmd.ExecuteScalar()
)-由于您的存储过程不是只返回一行,而是只返回一列(如
SELECT COUNT(*)…
会),因此调用
ExecuteScalar
是错误的方法。另外:
@message
的参数需要设置为
parameter.Direction=ParameterDirection.Output
才能返回它返回的内容…SP在错误的数据库中?权限不足以查看/执行具有集成帐户(ASPNET用户/IIS)的SP?我认为“prmOut”的声明方式与我声明“returnValue”的方式相同?这将替换所有内容,从第一个
returnValue=cmd.ExecuteScalar()