Преобразование Request.QueryString в целое число - PullRequest
4 голосов
/ 14 февраля 2009

Как преобразовать строку Request.Query в целочисленное значение. Я перепробовал все Convert.ToInt32 и Int32.Parse, но он говорит, что строка ввода не в правильном формате. Я использую строковое значение в качестве входных данных для хранимой процедуры, которая принимает только целочисленные типы для этого поля.

Вот часть кода -

string rid=Request.QueryString["RID"];
lblRID.Text = rid;
int id= Int32.Parse(rid);

    if (lblRID.Text!= null)
    SqlCommand myCommand = new SqlCommand("usp_NewResource_get", myConnection);
        myCommand.Parameters.AddWithValue("@RID",id);  //RID is int in database and stored procedure
        myCommand.CommandType = CommandType.StoredProcedure;

Ответы [ 7 ]

9 голосов
/ 14 февраля 2009
int foo;
int.TryParse(Request.QueryString["foo"], out foo);

или, как вы говорите, int.Parse следует преобразовать в int

Не могли бы вы опубликовать здесь код?

6 голосов
/ 17 февраля 2009

Быстро и грязно (и при загрузке страницы, потому что это пример, вы должны быть в состоянии понять, что происходит из этого)

<script runat="server">
    private void Page_Load(object sender, System.EventArgs e){

        string test = Request.QueryString["foo"];

        //Convert the query string you captured to an int and store it in an int.
        int intTest = Convert.ToInt32(test); 

        Response.Write(intTest.GetType() + "<br>" + intTest);   
    }
</script>
3 голосов
/ 14 февраля 2009

Как насчет просмотра ввода, который вы предоставляете для Int32.Parse?

2 голосов
/ 14 ноября 2011

Мы используем базовый класс, от которого наследуется каждая страница. У нас есть следующий метод, который возвращает целочисленные значения из параметров строки запроса:

protected int FetchQueryStringIdentifierByKey(string key)
{
    int identifier;
    var isInt = int.TryParse(Request.QueryString[key], out identifier);
    return (isInt) ? identifier : 0;
}

Кредит отправляется Джейсону Найту за его исследования исходных результатов тестирования в .NET 2.0.

1 голос
/ 08 ноября 2014
string id = Request.QueryString["RID"].ToString(); 
userid=Convert.ToInt32(id);
0 голосов
/ 14 февраля 2009

Проблема в том, что значение, передаваемое в строке запроса с параметром RID, не является числом, поэтому его нельзя проанализировать в int. Например, у вас есть ?RID=hello или, возможно, параметр RID вообще отсутствует (в этом случае значение равно нулю). Проверьте строку запроса, чтобы увидеть фактическое переданное значение.

0 голосов
/ 14 февраля 2009

Как насчет использования TryParse следующим образом:

string rid = Request.QueryString["RID"];
int id = 0;
if (!string.IsNullOrEmpty(rid) && Int32.TryParse(rid, out id))
{
    lblRID.Text = rid;
    SqlCommand myCommand = new SqlCommand("usp_NewResource_get", myConnection);
    myCommand.Parameters.AddWithValue("@RID",id);
    myCommand.CommandType = CommandType.StoredProcedure;
    myCommand.Execute...
}
...