2014-01-21 3 views
0

웹 서비스에서 아래 코드에 문제가 있습니다. 솔루션을 찾았지만 지금까지 본 것 외에 내가하는 일과 다른 점은 없습니다.ExecuteReader가 "매개 변수? _1에 기본값이 없습니다."오류

NB : 'AccountNo'문자열 변수는 아래 코드를 포함하는 함수로 전달됩니다.

오류는 마지막 코드 줄 (ExecuteReader)에서 생성됩니다.

Dim sConnString As String 
    Dim rdr As OleDbDataReader 
    Dim orderPaid As Decimal 
    Dim fbeused As Decimal 

    sConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\orders.mdb'" 

    Dim conn As New OleDbConnection(sConnString) 

    Dim sb As New StringBuilder 
    sb.Append("SELECT DISTINCTROW OrderHeaders.Accountno, Sum(([paidqty]*[unitprice])*[orderheaders].[entpercent]/100) AS orderpaid, Sum([freeqty]*[unitprice]) AS fbeused") 
    sb.Append(" FROM OrderHeaders INNER JOIN OrderDetails ON OrderHeaders.[OrderNo] = OrderDetails.[OrderNo]") 
    sb.Append(" GROUP BY OrderHeaders.Accountno HAVING OrderHeaders.Accountno=?") 
    Dim sqlString As String = sb.ToString 

    Dim cmd As New OleDbCommand(sqlString, conn) 
    cmd.CommandType = CommandType.Text 
    'cmd.Parameters.AddWithValue("AccNo", AccountNo) 
    cmd.Parameters.Add("AccNo", OleDbType.VarWChar).Value = AccountNo 
    conn.Open() 

    rdr = cmd.ExecuteReader() 

(위에서 언급 한 바와 같이) 나는이 얻을 오류

Parameter ?_1 has no default value 
+0

가능한 중복 (http://stackoverflow.com/questions/1476770/oledbcommand-parameters-order-and-priority) – Dubas

답변

0

는 사실 문제는 잘못된 가정이 있고 그 코드에 오류가 있다고했다를 사용하여 문자열을 받고 있는지 확인 할 수있다.

SQL 쿼리의 구문이 정확하고 매개 변수가 올바르게 삽입되고 있습니다. 그러나 테스트 데이터에는 오류가 있었으므로 올바른 형식의 쿼리로 결과가 반환되지 않았습니다.

모두에게 감사드립니다.

-1

중복의 : 매개 변수를 전달하는 는 OLE DB .NET 공급자의 이름은 지원하지 않습니다 OleDbCommand parameters order and priority

매개 변수 CommandType이 Text로 설정된 경우 OleDbCommand에 의해 호출되는 SQL 문이나 저장 프로 시저로 변환합니다. 이 경우 물음표 (?) 자리 표시 자 을 사용해야합니다. 예를 들어 : "?"당신이 무엇

// Create SQL with ? for each parameter 
String sql = "SELECT Address FROM Adresses WHERE Country = ? AND City = ?"; 
OleDbCommand command = new OleDbCommand(sql , connection); 

// Add to command each paramater VALUE by position. 
// One parameter value for ? 
command.Parameters.Add("My City") ; 
command.Parameters.Add("My Country") ; 

http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx

+0

당신이보고 했 내 코드? – wingyip

+0

그것이 내가하는 일이다 – wingyip

0

은과 올바른 보인다 명령에 추가 된 매개 변수에 대한 매개 변수 위치 지정자로 사용됩니다. 현재 OleDbType.VarWChar로 식별 된 매개 변수가 있습니다. 그게 의도 된거야? 유니 코드 데이터를 다루고 있습니까? 나는이 경우에 의심하지 않는다. System.String 값을 처리하도록 표현 된 OleDbType.Char로 변경해보십시오.

당신은 또한 당신이

AccountNo.ToString()

+0

사실 그것은 정확했다. Annoyingly이 문제는 테스트 데이터의 오류로 인해 발생했습니다. 매우 실망합니다. 어쨌든 입력 해 주셔서 감사합니다. – wingyip

3

그것은 검색을위한 구글의 현재 상위 두 StackOverflow의 결과

Parameter ?_ has no default value 

모두 질문자가 자신의 원래의 질문에 결함 또는 테스트 데이터 또는 무엇이든은 (비록 거기에 다시 와서 말을 가지고 참여하는 수치 질문자가 다시 확인하는 것이 좋습니다).

(정상적인 상황에서 발생으로)이 오류에 대한 설명은 마크 Gravell here에 의해 제공됩니다 :

은 널 (null)의 .Value와

매개 변수가 전달되지 않습니다. 조금도.

의미 론적 null을 전달하는 대신 DBNull.Value를 전달해야합니다. 예를 들어 : [순서와 우선 순위 매개 변수에서 OleDbCommand]의

com.Parameters.Add("@p7", OleDbType.Char, 255).Value = 
     ((object)values7[0]) ?? DBNull.Value; (etc) 
관련 문제