2013-06-07 1 views
1

SQL select 쿼리에 매개 변수를 전달하려고합니다. 어떤 이유로 입력 문자열이 올바른 형식이 아닙니다 ... 문자열을 datetime ...으로 변환 할 때 오류가 있습니까?

, 내가 노력할 상관없이, 내가 같은 오류가 점점 계속하지 :하지 corect 형식

및 제안에 입력 문자열 : 날짜에 문자열을 변환 할 때 은 취하도록 문자열을 구문 분석 각 변수를 datetime 객체에 넣기 전의 날짜.

나는 무엇을 해야할지 모르겠다. 여기에 코드가 있습니다.

SQL 쿼리 :

ALTER PROCEDURE SearchAllPlayers 
(
@personName, 
@personPay, 
@IDs 
) 

SELECT DISTINCT 
         person.personID, sports.sportsID, person.personName, person.personPay, sports.sport, 

FROM   sports INNER JOIN 
       person INNER JOIN 
       personSport ON personSport.personID = person.personID 
         INNER JOIN 
       personSport ON personSport.sportID = sports.sportsID 

WHERE  (person.personName LIKE '%' + @personName + '%') 
       AND 
      (person.personPay >= @personPay OR 0 = @personPay) 
       AND 
      (person.regDate >= { fn CURDATE() } 
       AND 
      (sports.sportID IN 
        (SELECT ID FROM dbo.fnSplitter(@IDs) AS fnSplitter_1) OR @IDs = 0) 

코드 숨김 :이 보이지 않는다

protected void Button1_Click(object sender, EventArgs e) 
{ 
    searchGrid(); 
} 

protected void searchGrid() 
{ 
    SqlConnection conn = new SqlConnection(connSTR); 
    com = new SqlCommand(); 
    conn.Open(); 

    com.Connection = conn; 

    com.CommandText = "SearchAllPlayers"; 
    com.CommandType = CommandType.StoredProcedure; 

    string StringWithDelimiter = string.Empty; 
    for (int i = 0; i < DropDownCheckBoxes1.Items.Count; i++) 
    { 
     if (DropDownCheckBoxes1.Items[i].Selected) 
      StringWithDelimiter += DropDownCheckBoxes1.Items[i].Value + ";"; 
    } 

    com.Parameters.Add("@personName", SqlDbType.VarChar).Value = personName.Text; 

    //next line is where I am having problems 
    com.Parameters.Add("@personPay", SqlDbType.Decimal).Value = ?????? 
    com.Parameters.Add("@IDs", SqlDbType.VarChar).Value = StringWithDelimiter; 

so far i've tried the following combinations, all to know avail. 


com.parameters.add("@playerPay", sqldbtype.decimal).value = playerPayTextBox.Text; 

내가 다음과 같은 오류가 작동하는 ". 오류 소수점 데이터 유형 NVARCHAR로 변환" 가

com.parameters.add("@playerPay", sqldbtype.decimal).value = playerPayTextBox.tostring(); 

내가 같은 오류가 발생합니다 : :

은 그럼 나는이 시도. "오류 소수점 데이터 유형 NVARCHAR로 변환" 가 의미가

는, 그럼 내가 시도 :

com.parameters.add("@playerPay", sqldbtype.decimal).value = decimal.parse(playerPayTextBox.tostring()); 

오류 : "입력 문자열의 형식이 잘못되었습니다." - 다음 날짜 시간 것 ...

com.parameters.add("@playerPay", sqldbtype.decimal).value = decimal.parse(playerPayTextBox.text); 

오류 : "입력 문자열이 올바른 형식이 아닙니다." - 날짜 시간 것 ...

com.parameters.add("@playerPay", sqldbtype.decimal).value = convert.todecimal(playerPayTextBox.text); 

오류 : "입력 문자열이 올바른 형식이 아닙니다." - 날짜 시간 것 ...

com.parameters.add("@playerPay", sqldbtype.decimal).value = convert.todecimal(playerPayTextBox.text); 

오류 : "입력 문자열이 올바른 형식이 아닙니다." - 다음 날짜 일 ...

+1

문제의 입력 문자열은 무엇입니까? –

+0

분명히 playerPayTextBox.Text는 십진수를 나타내지 않습니다. 텍스트 상자에서 받아 들여야하는 값을 확인해야합니다. –

+0

playerPayTextBox.Text의 값을 디버깅 해 보셨습니까? – artsylar

답변

4

이 입력 문자열이 현재의 문화 소수점 기호를 사용하고 있는지 확인 할 확실하지! 당신의 입력 문자열이 규칙과 일치하지 않는 경우, decimal.Parse는 입력 문자열이 올바른 형식의 예외가 아니었다 발생

예를 들어 당신은 고정 문화권 사용하는 경우 :

decimal.Parse("17.5", CultureInfo.InvariantCulture) 

는 점은 인정 소수점이 될 것이다 .

당신이 그들은 또한 decimal.TryParse 방법은 또한 (분명히)

를 분석 고정 문화권에 더 적합한 언급 MSDN

에서 그것에 대해 더 이상 읽을 수, 당신의 입력 문자열이 null이 있는지 확인 비어 있거나 숫자가 아닌 문자가 포함되어 있습니다 (문화에 따라 하나, 선택 사항, 점 또는 쉼표 제외)

+0

정말요? 나는 그렇게 생각하지 않는다. 13.37은 많은 영어권 국가에서 쓰여진 10 진수의 예입니다. –

+0

아, 내 실수! 십진법. 문화적으로 특이한 부분이 있습니다! 예를 들어'decimal.Parse ("17.5", CultureInfo.GetCultureInfo ("en-US"). NumberFormat)'을 수행하면 올바르게 구문 분석됩니다. –

+0

기본 문화권이 "en-US"라고 생각합니다. 적어도 내가 수행 한 프로젝트에서 그렇습니다. 환경에서 이것이 기본값이 아닙니까? –

관련 문제