2013-07-24 70 views
1

我與Microsoft SQL Server Management Studio中的工作,和C#.NET字符串轉換爲int數據類型在C#.NET

我的代碼獲取從web瀏覽器串數據,並將其存儲在一個文本框,它與值進行比較我的數據庫,並獲取相應的int ID到該字符串。現在,這個int ID顯示在一個文本框(可選)中,然後存儲在我的數據庫的另一個表中。

我的代碼如下:

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

這取入​​,並將其顯示在文本框。然後我從數據庫中打開另一個表格,並將其值設置爲如下所示。

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

現在,這個代碼工作完全正常,當我運行頁面的HTML文件中的代碼,但如果我嘗試直接從Web瀏覽器中運行它,它給出了一個錯誤

輸入字符串的不位於行中示出該錯誤的正確格式

Convert.ToInt32(p); 

我錯過了什麼?誰能幫我這個?

+0

如果字符串實際上不是數字,就會發生這種情況。 – SLaks

+0

StateID返回什麼值?它不能是有效的積分格式。我只是調試它,看看'p'是什麼。 – Tim

+0

這是一個數字。當我通過HTML代碼運行時,它獲取值'36'。 – Parth6792

回答

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 
} 
+0

明白了!這對我有效。非常感謝。 :) – Parth6792

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

與我的答案類似,但它寫得很好,很有幫助,所以給你+1! – Jim