[SQL] 매개 변수화 된 쿼리가 공급되지 않은 매개 변수를 기대
SQL매개 변수화 된 쿼리가 공급되지 않은 매개 변수를 기대
나는 내 코드에 문제가있어 :
Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
list.Items.Clear()
cmd.CommandText = "SELECT * FROM borrow where (Department LIKE '%" & TextBox2.Text & "%')"
cmd.Connection = con
cmd.CommandType = CommandType.Text
con.Open()
rd = cmd.ExecuteReader()
If rd.HasRows = True Then
While rd.Read()
Dim listview As New ListViewItem
listview.Text = rd("ID").ToString
listview.SubItems.Add(rd("Department").ToString)
listview.SubItems.Add(rd("Purpose").ToString)
listview.SubItems.Add(rd("Items_Details").ToString)
listview.SubItems.Add(rd("Requested_by").ToString)
listview.SubItems.Add(rd("Approved_by").ToString)
listview.SubItems.Add(rd("Date").ToString)
listview.SubItems.Add(rd("Status").ToString)
listview.SubItems.Add(rd("Date_Returned").ToString)
list.Items.Add(listview)
End While
End If
con.Close()
내가 항목을 검색 할 텍스트 상자에 문자열에 입력하면이 오류를 얻을 :
캔 사람의 도움 나?
해결법
-
==============================
1.당신이 매개 변수에 null 값을 전달하면, 당신은 당신이 매개 변수를 추가 한 후에도이 오류가 발생합니다 그래서 값을 확인하려고 그 다음 DBNull.Value를 사용하는 경우는 null
당신이 매개 변수에 null 값을 전달하면, 당신은 당신이 매개 변수를 추가 한 후에도이 오류가 발생합니다 그래서 값을 확인하려고 그 다음 DBNull.Value를 사용하는 경우는 null
이 작동합니다
cmd.Parameters.Add("@Department", SqlDbType.VarChar) If (TextBox2.Text = Nothing) Then cmd.Parameters("@Department").Value = DBNull.Value Else cmd.Parameters("@Department").Value = TextBox2.Text End If
이것은 데이터베이스 DBNull이 허용 값에 오브젝트 계층에서 널 값을 변환한다.
-
==============================
2.당신의 웹 사이트는 해킹의 심각한 위험에 처해있다.
당신의 웹 사이트는 해킹의 심각한 위험에 처해있다.
SQL 주입에 최대 읽기 및 방법 .NET에서 그것을 방지하기 위해
귀하의 질의 문제는 지금 우려의 이상이다.
그러나.....
@ 잘못된 명칭의 솔루션은 확실히이 가깝지만되지 않습니다 :
이에 쿼리를 변경합니다 :
cmd.CommandText = "SELECT * FROM borrow where (Department LIKE '%@DepartmentText%')"
및 매개 변수 이런 식으로 (또는 @Misnomer가 수행하는 방식)를 추가합니다 :
cmd.Parameters.AddWithValue("@DepartmentText",TextBox2.Text)
중요한 차이점은 당신이 당신의 CommandText을 변경해야한다는 것입니다.
-
==============================
3.이 같은 매개 변수를 추가하십시오 -
이 같은 매개 변수를 추가하십시오 -
cmd.Parameters.Add("@Department", SqlDbType.VarChar) cmd.Parameters("@Department").Value = TextBox2.Text
및 @Abe Miessler 그가 잘 난 그냥 당신이 그것을 알아낼 것입니다 생각하는 일에 명령 텍스트를 변경합니다.
-
==============================
4.에 구축하고 ravidev의 답변을 단순화 :
에 구축하고 ravidev의 답변을 단순화 :
VB.NET 속기이다
cmd.Parameters.AddWithValue ( "부서 @", IF (TextBox2.Text, DBNull.Value))
는 C # 속기이다
cmd.Parameters.AddWithValue ( "부서 @", TextBox2.Text ?? DBNull.Value)
-
==============================
5.당신이 당신의 데이터베이스에 DataGridView 컨트롤에서 작성하는 경우, 반드시 빈 행이 없는지 확인. 설정 false로 '사용자가 행을 추가 할 수 있습니다'; 그것은 불필요한 마지막 빈 행을 자릅니다.
당신이 당신의 데이터베이스에 DataGridView 컨트롤에서 작성하는 경우, 반드시 빈 행이 없는지 확인. 설정 false로 '사용자가 행을 추가 할 수 있습니다'; 그것은 불필요한 마지막 빈 행을 자릅니다.
-
==============================
6.
SqlConnection conn = new SqlConnection(connectionString); conn.Open(); //SelectCustomerById(int x); comboBoxEx1.Items.Clear(); SqlCommand comm = new SqlCommand("spSelectCustomerByID", conn); //comm.Parameters.Add(new SqlParameter("cust_name", cust_name)); //comm.CommandText = "spSelectCustomerByID"; comm.Parameters.Add(new SqlParameter("cust_id", SqlDbType.Int)); comm.CommandType = CommandType.StoredProcedure; comm.ExecuteNonQuery(); SqlDataAdapter sdap = new SqlDataAdapter(comm); DataSet dset = new DataSet(); sdap.Fill(dset, "cust_registrations"); if (dset.Tables["cust_registrations"].Rows.Count > 0) { comboBoxEx1.Items.Add("cust_registrations").ToString(); } comboBoxEx1.DataSource = dset; comboBoxEx1.DisplayMember = "cust_name";
from https://stackoverflow.com/questions/3865982/the-parameterized-query-expects-the-parameter-which-was-not-supplied by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 파라미터하는 SqlCommand SQL 주입에 내 프로그램의 면역을 사용합니까? (0) | 2020.04.20 |
---|---|
[SQL] 날짜에 일을 추가 MYSQL (0) | 2020.04.20 |
[SQL] 어떻게 변환 쉼표로 2005 SQL 서버에서 테이블 레코드에 NVARCHAR을 분리? (0) | 2020.04.20 |
[SQL] (전치?)를 폭발 스파크 SQL 테이블에서 여러 열을 (0) | 2020.04.20 |
[SQL] SQL : 변수에 따라 선택 동적 열 이름 (0) | 2020.04.20 |