Must declare the scalar variable "#user_code" in parameterized query - asp.net

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim ds As DataSet = New DataSet()
Dim param As SqlParameter = New SqlParameter("#user_code", SqlDbType.Char, 4)
param.Value = "0016"
Const sqlstr As String = "select sectors.sector_code,sector_name from user_sectors inner join sectors on user_sectors.sector_code = sectors.sector_code where user_code = #user_code and sectors.sector_code not in ('z')"
Dim da As SqlDataAdapter = New SqlDataAdapter(sqlstr, _con)
da.Fill(ds)
ddl.DataValueField = "sector_code"
ddl.DataTextField = "sector_name"
ddl.DataSource = ds.Tables(0)
ddl.DataBind()
End Sub

Code for adding parameter to dataadapter
SqlConnection conn = new SqlConnection("Data
Source=localhost;Database=Northwind;Integrated Security=SSPI");
SqlCommand command = new SqlCommand("GetProducts", conn);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("#CategoryID", SqlDbType.Int).Value = 1;
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataSet ds = new DataSet();
adapter.Fill(ds, "Products");
add parameter to you data adapter object like this
da.Parameters.Add(param)
this is missing in your code
MSDN : Using Parameters with a DataAdapter

Related

I got an error at da.Fill(ds) command for my shopping cart project

This is my final-year mini-project. I tried to implement a shopping cart project.
But I get an error in filling details on gridview. I tried the below coding:
If Not IsPostBack Then
Dim dt As DataTable = New DataTable()
Dim dr As DataRow
dt.Columns.Add("sno")
dt.Columns.Add("productid")
dt.Columns.Add("productname")
dt.Columns.Add("price")
dt.Columns.Add("productimage")
dt.Columns.Add("cost")
dt.Columns.Add("totalcost")
If Request.QueryString("id") IsNot Nothing Then
If Session("Buyitems") Is Nothing Then
dr = dt.NewRow()
Dim mycon As String = "Data Source=Sandy-PC\SQLEXPRESS;Initial Catalog=master;Integrated Security=True"
Dim scon As SqlConnection = New SqlConnection(mycon)
Dim myquery As String = "select * from decorativestands where Id=" & Request.QueryString("id")
Dim cmd As SqlCommand = New SqlCommand()
cmd.CommandText = myquery
cmd.Connection = scon
Dim da As SqlDataAdapter = New SqlDataAdapter()
da.SelectCommand = cmd
Dim ds As DataSet = New DataSet()
da.Fill(ds)
dr("sno") = 1
dr("productid") = ds.Tables(0).Rows(0)("productid").ToString()
dr("productname") = ds.Tables(0).Rows(0)("productname").ToString()
dr("productimage") = ds.Tables(0).Rows(0)("productimage").ToString()
dr("price") = ds.Tables(0).Rows(0)("price").ToString()
dt.Rows.Add(dr)
GridView1.DataSource = dt
GridView1.DataBind()
Session("buyitems") = dt
Else
dt = CType(Session("buyitems"), DataTable)
Dim sr As Integer
sr = dt.Rows.Count
dr = dt.NewRow()
I got "sqlexception was unhandled by user code" error.

How to rebind grid view after update?

May I know how to rebind data to grid view table after update? Below is what I have tried so far:
Dim conn As New MySqlConnection
conn.ConnectionString = "server = localhost; user id = root; password = root; database = db_fyp"
Dim com As New MySqlCommand
Dim dt As New DataTable
Dim query As String
query = "update tblorder set OrderStatus = #OrderStatus where UserId = #UserId "
com = New MySqlCommand(query, conn)
com.Parameters.AddWithValue("#OrderStatus", tOrderStatus)
com.Parameters.AddWithValue("#UserId", Session("Username"))
conn.Open()
com.ExecuteNonQuery()
BindData()
conn.Close()
Here is my BindData function for insert data into grid view table. This part is working perfectly.
Private Sub BindData()
Dim conn As New MySqlConnection
conn.ConnectionString = "server = localhost; user id = root; password = root; database = db_fyp"
Dim com As New MySqlCommand
Dim dr As MySqlDataReader
Dim query As String
Dim dt As New DataTable
conn.Open()
query = "select FoodName, Qty, IngredientName, Quantity, OrderStatus from tblorder, tblorderdetail, tblfood, tblcustomizefooddetail, tblcustomizeingredient, tblordercustomize where UserId = #UserId and OrderStatus = #OrderStatus and tblorder.OrderId = tblorderdetail.OrderId and tblorderdetail.FoodId = tblfood.FoodId and tblorderdetail.OrderDetailId = tblordercustomize.OrderDetailId and tblfood.FoodId = tblcustomizefooddetail.FoodId and tblcustomizeingredient.IngredientId = tblcustomizefooddetail.IngredientId and tblordercustomize.IngredientId = tblcustomizeingredient.IngredientId"
com = New MySqlCommand(query, conn)
com.Parameters.AddWithValue("#UserId", Session("Username"))
com.Parameters.AddWithValue("#OrderStatus", "Pending")
dr = com.ExecuteReader
dt.Load(dr)
Session("OderTable") = dt
GridView1.DataSource = dt
GridView1.DataBind()
conn.Close()
End Sub
you already have a function to populate the grid, simply call it from within the updating code:
Dim conn As New MySqlConnection
conn.ConnectionString = "server = localhost; user id = root; password = root; database = db_fyp"
Dim com As New MySqlCommand
Dim dt As New DataTable
Dim query As String
query = "update tblorder set OrderStatus = #OrderStatus where UserId = #UserId "
com = New MySqlCommand(query, conn)
com.Parameters.AddWithValue("#OrderStatus", tOrderStatus)
com.Parameters.AddWithValue("#UserId", Session("Username"))
conn.Open()
com.ExecuteNonQuery()
conn.Close()
'you dont need all that
'dt.Load(????)
'GridView1.DataSource = dt
'GridView1.DataBind()
'just call this
BindData()

My textbox is not filled with data

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Not IsPostBack Then
TextBox3.Text = Now()
Dim com As New SqlCommand
com.CommandType = CommandType.Text
com.CommandText = "select productname ,productid,productdescreption,price from products order by productname "
com.Connection = con
Dim ad As New SqlDataAdapter
Dim ds As New DataSet
ad.SelectCommand = com
ad.Fill(ds)
DropDownList1.DataSource = ds
DropDownList1.DataTextField = "productname"
DropDownList1.DataValueField = "productid"
'Dim ss As Integer
'ss = Convert.ToInt32(DropDownList1.DataValueField)
'DropDownList1.DataValueField = ss
DropDownList1.DataBind()
Dim com2 As New SqlCommand
com2.CommandType = CommandType.Text
com2.CommandText = "select dealername ,dealerid from dealerin order by dealername "
com2.Connection = con
Dim ad2 As New SqlDataAdapter
Dim ds2 As New DataSet
ad2.SelectCommand = com2
ad2.Fill(ds2)
DropDownList2.DataSource = ds2
DropDownList2.DataTextField = "dealername"
DropDownList2.DataValueField = "dealerid"
DropDownList2.DataBind()
'Dim com3 As New SqlCommand
'com3.CommandType = CommandType.Text
'com3.CommandText = "select distinct productname ,productid,productdescreption from products "
'com3.Connection = con
'Dim ad3 As New SqlDataAdapter
'Dim ds3 As New DataSet
'ad2.SelectCommand = com3
'ad2.Fill(ds3)
'DropDownList3.DataSource = ds3
'DropDownList3.DataTextField = "productdescreption"
'DropDownList3.DataValueField = "productid"
'DropDownList3.DataBind()
End If
End Sub
Dim dss As New DataSet
Public Function getproduct_byid(ByVal productid As Integer) As DataSet
Try
Dim com3 As New SqlCommand
com3.CommandType = CommandType.StoredProcedure
com3.CommandText = "getproduct_byid"
com3.Connection = con
'com.Parameters.AddWithValue("#productid", productid)
Dim adapter3 As New SqlDataAdapter(com3)
adapter3.Fill(dss, "product")
Return dss
Catch ex As Exception
Response.Write("error due to " & ex.Message)
End Try
End Function
Protected Sub DropDownList1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DropDownList1.SelectedIndexChanged
Try
getproduct_byid(DropDownList1.SelectedValue)
If dss.Tables("product").Rows.Count = 1 Then
TextBox5.Text = dss.Tables("product").Rows(0).Item("price")
End If
Catch ex As Exception
Response.Write("error due to " & ex.Message)
End Try
End Sub
Protected Sub TextBox5_TextChanged(sender As Object, e As EventArgs) Handles TextBox5.TextChanged
Try
Dim a As Double
Dim b As Double
a = TextBox4.Text
b = TextBox5.Text
TextBox6.Text = A * b
Catch ex As Exception
Response.Write("error due to " & ex.Message)
End Try
End Sub
It might be your datatable contain more than 1 row ..
Change this
If dss.Tables("product").Rows.Count = 1 Then
To
If dss.Tables("product").Rows.Count > 0 Then

vb.net insert query error

variable Itemtext is already declared. Why this error??
Try
conn = New SqlConnection(connString)
conn.Open()
Dim i As Integer = 0
Using cmd As New SqlCommand()
For Each c In item
cmd.Connection = conn
cmd.CommandType = CommandType.Text
cmd.CommandText = "INSERT INTO tblItems(Item,Numberof) Values (#Itemtext,#Numberof)"
cmd.Parameters.AddWithValue("#Itemtext", c)
cmd.Parameters.AddWithValue("#Numberof", num(i))
cmd.ExecuteNonQuery()
i = i + 1
Next
End Using
Because you're adding the parameter each time in the loop
Using cmd As New SqlCommand()
cmd.Connection = conn
cmd.CommandType = CommandType.Text
cmd.CommandText = "INSERT INTO tblItems(Item,Numberof) Values (#Itemtext,#Numberof)"
Dim ItemParameter As SqlParameter = cmd.Parameters.Add("#Itemtext",SqlDbType.VarChar)
Dim NumberParameter As SqlParameter = cmd.Parameters.Add("#Numberof", SqlDbType.Int)
For Each c In item
ItemParameter.Value = c
NumberParameter.Value = num(i)
cmd.ExecuteNonQuery()
i = i + 1
Next
End Using

output parameter into label

instead of returning my output paremeter value in my stored procedure to my label it returns the default value i set my output parameter to.
why cant i put my output parameter into my text label
Dim reader As SqlDataReader
cmd.Parameters.AddWithValue("#tour", "2365")
cmd.Parameters.Add("#tourname", SqlDbType.VarChar)
cmd.Parameters("#tourname").Direction = ParameterDirection.Output
cmd.CommandText = "test"
cmd.CommandType = CommandType.StoredProcedure
cmd.Connection = conn
conn.Open()
reader = cmd.ExecuteReader()
Dim myTable As DataTable = New DataTable()
myTable.Load(reader)
DropDownList1.DataSource = myTable
DropDownList1.DataTextField = "ddate7"
DropDownList1.DataBind()
Label1.Text = cmd.Parameters("#tourname").ToString
conn.Close()
You haven't defined the #tourname parameter as an output parameter.
Dim param as New SqlParameter("tourname", 2356)
param.Direction = ParameterDirection.Output
cmd.Parameters.Add(param)

Resources