1

パラメータをSQL選択クエリに渡そうとしています。

何らかの理由で、何を試しても同じエラーが発生し続けます:入力文字列が正しい形式ではありません

提案: 文字列を日時に変換するときは、各変数を日時オブジェクトに入れる前に、文字列を解析して日付を取得します。

私は何をすべきか困惑しています。これがコードです。

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 を 10 進数に変換中にエラーが発生しました。」

だから私はこれを試しました:

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

同じエラーが表示されます:「データ型 nvarchar を 10 進数に変換中にエラーが発生しました。」

これは理にかなっているので、試してみました:

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);

エラー: 「入力文字列の形式が正しくありませんでした。」-それから日時のこと...

何をすべきかわからない

4

1 に答える 1

5

入力文字列が現在のカルチャの小数点記号を使用していることを確認してください! 入力文字列がこれらのルールに一致しない場合decimal.Parse、Input string was not in correct format 例外をスローします

たとえば、インバリアント カルチャを使用する場合:

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

ドットは、受け入れられる小数点になります。

詳細については、MSDNを参照してください。

そこで彼らはまた、このdecimal.TryParse方法は不変文化の解析により適していると述べています

また(明らかに)、入力文字列がnull、空、または数字以外の文字を含んでいないことを確認してください(文化に応じて、オプションのドットまたはコンマを除く)

于 2013-06-07T00:14:22.733 に答える