1

我正在使用 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);

我错过了什么吗?谁能帮我这个?

4

2 回答 2

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
}

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

于 2013-07-24T15:32:49.887 回答
0

尝试Int32.Parse(p)改用。如果您不希望解析失败时出现异常,您也可以使用 TryParse,取而代之的是,您会得到一个布尔值来显示它是否成功。

所以从你的例子来看,它会是这样的......

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
}
于 2013-07-24T15:25:35.947 回答