매개 변수화 된 쿼리에 제공되지 않은 매개 변수가 필요합니다.
내 코드에 문제가 있습니다.
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";
'programing' 카테고리의 다른 글
파이썬 : 비어 있지 않은 디렉토리 삭제 (0) | 2021.01.17 |
---|---|
Python으로 머신의 외부 IP 주소 가져 오기 (0) | 2021.01.17 |
조인 방법과 람다를 사용하여 EntityFramework 조인 (0) | 2021.01.17 |
파일 또는 어셈블리 'System.Web.WebPages.Razor, 버전 = 2.0.0.0을로드 할 수 없습니다. (0) | 2021.01.17 |
Rails 앱의 경우 로컬로 CSS로드되지만 Heroku에서는로드되지 않음 (0) | 2021.01.17 |