2016-06-15 47 views
0

當我參數化查詢時,出現「必須聲明標量變量」的錯誤。我是使用SQL Server的新手。而我使用的版本是SQL Server 2012的下面是代碼片段:在使用SQL Server 2012時在vb中使用參數化查詢

Protected Sub Main_Page 
    Dim con as OleDbConnection 
    Dim cmd as OleDbCommand 
    Dim query as String 

    con = New OleDbConnection("Provider=SQLNCLI11;Data Source=ARIES-PC\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=SchoolDB") 
    con.Open() 
    query = "INSERT INTO Instructors(FirstName,LastName,Address,Contact_Number) VALUES (@fname,@lname,@address,@number)" 
    cmd = New OleDbCommand(query, con) 
    cmd.Parameters.AddWithValue("@fname", txtFirstName.Text) 
    cmd.Parameters.AddWithValue("@lname", txtLastName.Text) 
    cmd.Parameters.AddWithValue("@address", txtAddress.Text) 
    cmd.Parameters.AddWithValue("@number", txtContact.Text) 
    cmd.ExecuteNonQuery() 
    cmd.Dispose() 
    con.Close() 
    Response.Write(<script>alert('Success!')</script>) 
End Sub 
+1

你應該看看[我們可以停止使用AddWithValue()了嗎?](http://blogs.msmvps.com/ jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already /)並停止使用'.AddWithValue()' - 它可能會導致意外的和令人驚訝的結果... –

+0

另外,您應該使用任何實現'IDisposable'接口的對象的'using'語句。除此之外,你的代碼似乎應該工作。 –

+0

任何你使用OleDb代替原生SqlClient庫的原因?通常這個錯誤意味着你的一個字段或者你的表被拼錯了,並被錯誤地認爲是一個參數。 – Steve

回答

0

參數化查詢,以避免SQL注入,所以最好的做法使用帶有參數的簡單的存儲過程,它的正常工作。

你的C#代碼

Protected Sub Main_Page() 
     Dim con As OleDbConnection 
     Dim cmd As OleDbCommand 

     con = New OleDbConnection("Provider=SQLNCLI11;Data Source=ARIES-PC\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=SchoolDB") 

     con.Open() 
     cmd = New OleDbCommand("spSaveData", con) 
     cmd.CommandType = CommandType.StoredProcedure 
     cmd.Parameters.AddWithValue("@fname", txtFirstName.Text) 
     cmd.Parameters.AddWithValue("@lname", txtLastName.Text) 
     cmd.Parameters.AddWithValue("@address", txtAddress.Text) 
     cmd.Parameters.AddWithValue("@number", txtContact.Text) 
     cmd.ExecuteNonQuery() 
     cmd.Dispose() 
     con.Close() 
     Response.Write(<script>alert('Success!')</script>) 

    End Sub 

你的存儲過程的代碼

CREATE PROCEDURE spSaveData 
    @fname varchar(200), 
    @lname varchar(200), 
    @address varchar(300), 
    @number int 
AS 
BEGIN 
    INSERT INTO Instructors(FirstName, LastName, Address, Contact_Number) 
    VALUES (@fname, @lname, @address, @number) 
END 
+0

謝謝!它爲我工作! :D –

+0

歡迎您隨時發帖提問,並投票答覆,如果有幫助 –

+0

肯定的事情..... –