programing

매개 변수화 된 쿼리에 제공되지 않은 매개 변수가 필요합니다.

projobs 2021. 1. 17. 10:23
반응형

매개 변수화 된 쿼리에 제공되지 않은 매개 변수가 필요합니다.


내 코드에 문제가 있습니다.

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()

항목을 검색하기 위해 텍스트 상자에 문자열을 입력하면이 오류가 발생합니다.

매개 변수가있는 쿼리 '(@ Parameter1 nvarchar (4000)) SELECT * FROM loan where (Departme'는 제공되지 않은 매개 변수 '@ Parameter1'을 예상합니다.

누구든지 나를 도울 수 있습니까?


매개 변수에 null 값을 전달하면 매개 변수를 추가 한 후에도이 오류가 발생하므로 값을 확인하고 null이면 DBNull.Value를 사용합니다.

이것은 작동합니다

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

그러면 개체 계층의 null 값이 데이터베이스에서 허용되는 DBNull 값으로 변환됩니다.


귀하의 웹 사이트가 해킹 당할 심각한 위험에 처해 있습니다.

SQL 주입.NET에서이를 방지하는 방법에 대해 읽어보십시오 .

귀하의 쿼리 문제는 현재 귀하의 우려 사항 중 가장 적습니다.

그러나.....

@Misnomer의 솔루션은 가깝지만 거기에는 없습니다.

다음과 같이 쿼리를 변경하십시오.

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

다음과 같이 매개 변수를 추가합니다 (또는 @Misnomer가 수행하는 방식).

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

중요한 차이점은 CommandText를 변경해야한다는 것입니다.


다음 과 같은 매개 변수를 추가해보세요.

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

명령 텍스트를 @Abe Miessler가 옳은 일로 변경하십시오. 나는 당신이 그것을 알아낼 것이라고 생각했습니다.


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

VB.NET 속기는

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

C # 속기는

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


DataGridView 컨트롤에서 데이터베이스로 쓰는 경우 빈 행이 없는지 확인합니다. '사용자가 행을 추가하도록 허용'을 false로 설정하십시오. 불필요한 마지막 빈 행을 자릅니다.


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";

참조 URL : https://stackoverflow.com/questions/3865982/the-parameterized-query-expects-the-parameter-which-was-not-supplied

반응형