2013-02-13 1 views
0

Я смотрел вокруг StackOverflow, а также ряд других сайтов, я нашел код, чтобы поставить это вместе:данных, не добавляя к SQL Server 2008 с помощью ASP.net & VB как код позади файла

Imports System.Data 
Imports System.Data.SqlClient 
Partial Class _Default 
Inherits System.Web.UI.Page 

    Dim sqlConnection As SqlConnection 
    Dim sqlCommand As SqlCommand 
    Dim sqlString, iName, iDescription As String 
    Dim iQuantity As Integer 
    Dim iPrice As Decimal 

    Protected Sub cmdAddStock_Click(ByVal sender As Object, ByVal e As System.EventArgs) 
    Handles cmdAddStock.Click 

    iName = txtItemName.Text 
    iDescription = txtDescription.Text 
    iQuantity = txtQuantity.Text 
    iPrice = txtPrice.Text 

    Using myConnection As New SqlConnection("Server=localhost;Database=BBBLeeds; 
    Trusted_Connection=True") 
     myConnection.Open() 

     sqlCommand = New SqlCommand("INSERT INTO tblItem(ItemName, Description, 
     Price, Stock) values('" + iName + "','" + iDescription + "','" + iPrice + 
     "','" + iQuantity + "')") 

     sqlCommand.ExecuteNonQuery() 
     myConnection.Close() 
     Response.Redirect(Request.RawUrl, True) 
    End Using 
End Sub 
End Class 

ошибка, которая возвращается представлены следующим образом: „к типу„Double“не является допустимым«

»Преобразование из строки“ INSERT INTO tblItem (ITEMNAME, De

Это структура данных с SQL:

http://i23.photobucket.com/albums/b368/Damo115/Untitled.png

Благодарим за любые советы, которые вы можете предоставить.

+3

Пожалуйста, изучите параметры SQL для отправки параметров. Это сэкономит много хлопот. И оператор конкатенации строк в VB.NET - '&', а не '+'. –

ответ

1

Изменить код, чтобы сделать это, это позволит избежать каких-либо SQL инъекций, и вам не придется иметь дело с конкатенации и добавление котировок вокруг значений.

В вашей таблице price является money типа данных и Stock является int, но вы отправляете значения как строки, добавляя одиночные кавычки вокруг них.

sqlCommand = New SqlCommand("INSERT INTO tblItem(ItemName, Description, 
     Price, Stock) values(@item,@descr,@price,@stock)") 

sqlCommand.Parameters.AddWithValue("@item",iName) 
sqlCommand.Parameters.AddWithValue("@descr",iDescription) 
sqlCommand.Parameters.AddWithValue("@price",iPrice) 
sqlCommand.Parameters.AddWithValue("@stock",iQuantity) 

sqlCommand.ExecuteNonQuery() 
+0

Это часть ответа, которую я ищу, но у меня теперь есть проблема, когда я получаю ошибку: «ExecuteNonQuery: свойство подключения не было инициализировано». Несмотря на то, что на это есть ответы, независимо от того, что я пробовал, я все равно получаю ту же проблему, которая отбрасывается. Любая идея? – Damian

0

Вы передаете строковый параметр (txtPrice.Text) в виде числа (столбец db Price - это число). Вам нужно сначала скрывать строку до номера.

-1

Вы должны использовать оператор & вместо оператора + для конкатенации строк

sqlCommand = New SqlCommand("INSERT INTO tblItem(ItemName, Description, 
     Price, Stock) values('" & iName & "','" & iDescription & "','" + iPrice & 
     "','" & iQuantity & "')") 
+0

Просьба пояснить нижний план. Это конкретно отвечает на вопрос. – PGallagher

+1

Извините, это отбрасывает ту же проблему, что и раньше. Что-то друг сказал мне раньше, поставил ли я переменную как String или что-то подобное в VB, она попытается ввести данные из VB как целое или двойное (последнее в данном случае) в SQL, и из-за этого оно переходит в debug Режим. Однако указанный ответ исправляет основную проблему, но, к сожалению, вызывает другое. Спасибо за помощь, хотя, оцените, вы пытаетесь. Кроме того, я извиняюсь, но это был не я, кто проголосовал за вас (что я знаю). – Damian

+0

Ahhh ... Я понимаю ... Я думаю, что лучший ответ - тот, который вы приняли :-D Спасибо за ответ! – PGallagher