복붙노트

[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. ==============================

    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. ==============================

    2.당신의 웹 사이트는 해킹의 심각한 위험에 처해있다.

    당신의 웹 사이트는 해킹의 심각한 위험에 처해있다.

    SQL 주입에 최대 읽기 및 방법 .NET에서 그것을 방지하기 위해

    귀하의 질의 문제는 지금 우려의 이상이다.

    그러나.....

    @ 잘못된 명칭의 솔루션은 확실히이 가깝지만되지 않습니다 :

    이에 쿼리를 변경합니다 :

    cmd.CommandText = "SELECT * FROM borrow where (Department LIKE '%@DepartmentText%')"
    

    및 매개 변수 이런 식으로 (또는 @Misnomer가 수행하는 방식)를 추가합니다 :

    cmd.Parameters.AddWithValue("@DepartmentText",TextBox2.Text)
    

    중요한 차이점은 당신이 당신의 CommandText을 변경해야한다는 것입니다.

  3. ==============================

    3.이 같은 매개 변수를 추가하십시오 -

    이 같은 매개 변수를 추가하십시오 -

    cmd.Parameters.Add("@Department", SqlDbType.VarChar)
    cmd.Parameters("@Department").Value = TextBox2.Text
    

    및 @Abe Miessler 그가 잘 난 그냥 당신이 그것을 알아낼 것입니다 생각하는 일에 명령 텍스트를 변경합니다.

  4. ==============================

    4.에 구축하고 ravidev의 답변을 단순화 :

    에 구축하고 ravidev의 답변을 단순화 :

    VB.NET 속기이다

    cmd.Parameters.AddWithValue ( "부서 @", IF (TextBox2.Text, DBNull.Value))

    는 C # 속기이다

    cmd.Parameters.AddWithValue ( "부서 @", TextBox2.Text ?? DBNull.Value)

  5. ==============================

    5.당신이 당신의 데이터베이스에 DataGridView 컨트롤에서 작성하는 경우, 반드시 빈 행이 없는지 확인. 설정 false로 '사용자가 행을 추가 할 수 있습니다'; 그것은 불필요한 마지막 빈 행을 자릅니다.

    당신이 당신의 데이터베이스에 DataGridView 컨트롤에서 작성하는 경우, 반드시 빈 행이 없는지 확인. 설정 false로 '사용자가 행을 추가 할 수 있습니다'; 그것은 불필요한 마지막 빈 행을 자릅니다.

  6. ==============================

    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";
    
  7. from https://stackoverflow.com/questions/3865982/the-parameterized-query-expects-the-parameter-which-was-not-supplied by cc-by-sa and MIT license