programing

매개 변수화된 쿼리는 제공되지 않은 매개 변수를 예상합니다.

closeapi 2023. 5. 26. 20:58
반응형

매개 변수화된 쿼리는 제공되지 않은 매개 변수를 예상합니다.

코드에 문제가 있습니다.

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 browth where (Departme'는 제공되지 않은 매개 변수 '@Parameter1'을 예상합니다.

누가 나를 도와줄 수 있나요?

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

이것은 효과가 있을 것입니다.

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 값으로 변환됩니다.

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

.NET에서 SQL Injection 및 SQL Injection을 방지하는 방법읽어보십시오.

당신의 질문 문제는 지금 당신의 관심사 중 가장 작은 것입니다.

하지만...

@Misnomer의 솔루션은 가깝지만 완전히 그렇지는 않습니다.

쿼리를 다음으로 변경합니다.

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

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

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

중요한 차이점은 명령 텍스트를 변경해야 한다는 것입니다.

Ravidev의 답변 기반 구축 및 단순화:

VB.NET 단축형은 다음과 같습니다.

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

C# 단축형은 다음과 같습니다.

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

다음과 같은 매개 변수를 추가해 보십시오.

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

그리고 명령 텍스트를 @Abe Miessler가 옳다는 것으로 변경합니다. 저는 당신이 그것을 알아낼 것이라고 생각했습니다.

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

반응형