2014-11-26 1 views
0

컨트롤 ID가 HourlyCharter 인 dropdownList가 있습니다.매개 변수가있는 쿼리를 사용하면 데이터 형식이 일치하지 않습니다. 어떤 아이디어?

그런 다음 코드 숨김에서 hourly가 HourlyCharter 값과 같은 데이터베이스에서 레코드를 쿼리하려고합니다. 그것은 작동

StrSQL = "select h.fare, h.tip, h.total from hourlyQRY h " 
    StrSQL += " Where h.Hourly = " & HourlyCharter.SelectedValue 

' Initialize Database Connection 
Dim connStr As String = ConfigurationManager.ConnectionStrings("ALSConnectionString").ConnectionString 
Dim conn As New OleDbConnection(connStr) 
Dim cmd As New OleDbCommand(StrSQL, conn) 

:이 코드를 사용하는 경우

. 나는 이와 같은 매개 변수가있는 쿼리를 사용하는 경우

:

StrSQL = "select h.fare, h.tip, h.total from hourlyQRY h " 
    StrSQL += " Where h.Hourly = @hourly" 

' Initialize Database Connection 
Dim connStr As String = ConfigurationManager.ConnectionStrings("ALSConnectionString").ConnectionString 
Dim conn As New OleDbConnection(connStr) 
Dim cmd As New OleDbCommand(StrSQL, conn) 

'We use parametized query to prevent sql injection attack 
Dim p1 As New OleDbParameter("@hourly", HourlyCharter.SelectedValue) 

cmd.Parameters.Add (P1) 나는 오류 다음 얻을

: 기준 식의

데이터 형식이 일치하지

Hourly는 Number 데이터 형식이며 우리는 Access 2010 데이터베이스를 사용하고 있습니다.

아이디어를 해결하는 방법은 무엇입니까?

'open recordset to receive db values 
rs = cmd.ExecuteReader() 

' This acts like the (Not RecordSource.Eof) in ASP 3.0 to loop and retrieve records. 
While rs.Read() 
    ' If rs("city") <> "" Then 
    Dim tipValue As Decimal = rs("tip") 
    Dim totValue = rs("total") 
    ' Else 
    ' End If 
    Dim tp As String = [String].Format("{0:C}", tipValue) 
    Dim tot As String = [String].Format("{0:C}", totValue) 
    lblTip.Text = tp 
    lblTotal.Text = tot 

End While 
+0

시도 할 수 있습니다 [문자열]' – OneFineDay

답변

0

대신

Dim p1 As New OleDbParameter("@hourly", HourlyCharter.SelectedValue) 
cmd.Parameters.Add(p1) 

의 당신은 당신이`에 괄호를 넣어 필요가 없습니다

cmd.Parameters.AddWithValue("@hourly", HourlyCharter.SelectedValue) 
+0

감사합니다. 나는 이것이 왜 효과가 있었는지 모르지만 효과가있다! 대단히 감사합니다. – Tairoc

1

매개 변수에 넣은 개체도 숫자 형식인지 확인해야합니다. SelectedValue은 문자열입니다.

Dim p1 As New OleDbParameter("@hourly", Decimal.Parse(HourlyCharter.SelectedValue)) 

데이터 유형 불일치가 발생합니다. 숫자가 필요하지만 문자열이 표시됩니다.

+0

덕분에 신속한 응답에 대한 많은. 오류가 계속 발생합니다. 아마도이 오류는 다음 줄에 나와 있습니다. rs = cmd.ExecuteReader(). 위의 코드를 업데이트했습니다 – Tairoc

+0

잠시 동안 Access를 사용하지 않았지만 다른 숫자 유형 (정수, 부동 소수점 등)이 있다고 생각합니다. 어느 쪽을 사용하든 매개 변수 값은 해당 유형이어야합니다. –

0

매개 변수의 데이터 유형을 지정하십시오.

p1.OleDbType = OleDb.OleDbType.Numeric 

당신은이 생성자에 할도 수 있지만, 더 많은 매개 변수를 필요로 내가 너희를 모든 사람이 아니다 나는 그들이 무엇을 알고 확실하지 않다 : 당신은 그것을 만든 후 그것을 할 수 있습니다.

관련 문제