将字符串转换为c#.net中的int数据类型

时间:2013-07-24 15:22:56

标签: c# .net sql-server-2008

我正在使用Microsoft SQL Server Management Studio和C#.net

我的代码从webBrowser获取字符串数据,将其存储在文本框中,将其与数据库中的值进行比较,并获取相应的int ID到该字符串。现在,此int ID显示在文本框中(可选),然后存储在我的数据库中的另一个表中。

我的代码如下:

string p = dComm.executeScalar("select StateID from StateMaster where StateCode='" + txtState.Text + "'");
textBox1.Text = p;
Convert.ToInt32(p);

这将获取StateID,并将其显示在文本框中。然后我从数据库中打开另一个表,并将值放在下面。

dTbl = dComm.openDataTable("CompanyMaster", "select * from CompanyMaster where 1=0 ");
DataRow dRow;
dRow = dTbl.NewRow();
dRow["StateID"] = p;

现在,当我在页面的HTML文件上运行代码时,此代码可以正常工作,但如果我尝试直接从Web浏览器运行它,则会出错

  

输入字符串的格式不正确

错误显示在以下行:

Convert.ToInt32(p);

我错过了什么吗?任何人都可以帮我这个吗?

2 个答案:

答案 0 :(得分:1)

您遇到的问题:

Convert.To是相对艰苦的工作,当输入来自最终用户时,不应该(在我看来)使用。 当向Convert.To 提供错误数据时,它会提供无法很好处理的异常。

例如:

 textbox1.Text = "test";
 Convert.ToInt32(textbox1.text);

它会崩溃并燃烧。

我建议你进入使用TryParse的例行程序,它可以更好地处理坏值。

示例:

int test = 0;
int.TryParse(textbox1.text, out test)
{
      //do validation with if statements
}

这将取消任何不良数据,并确保最终用户只能获得您自己编写的用户友好消息框。这意味着你可以告诉他们他们在哪里放了一个坏的值,以便他们可以纠正它而不会导致程序崩溃和烧毁。

答案 1 :(得分:0)

请尝试使用Int32.Parse(p)。如果您不希望在失败的解析上发生异常,您也可以使用TryParse,而是获得一个显示它是否成功的bool。

所以从你的例子来看,就像这样......

string p = dComm.executeScalar("select StateID from StateMaster where StateCode='" + txtState.Text + "'");
textBox1.Text = p;
int pInt = Int32.Parse(p);

或者如果你想使用TryParse,它就像这样......

string p = dComm.executeScalar("select StateID from StateMaster where StateCode='" + txtState.Text + "'");
textBox1.Text = p;
int pInt;
if(!Int32.TryParse(p, out pInt))
{
  //Parsing failed, do something about it
}