2011-11-02 83 views
2

文本框1 2和4的輸出將以單個字符形式出現,然後是空格。爲什麼我在文本框中輸出無效輸出?

實施例:像在DB的值是40,然後在其文本框中呈現爲4.

數據類型爲Nchar(10)一列的和爲int。在這兩種情況下都會發生無效輸出。

namespace WebApplication2 
{ 
    public partial class WebForm2 : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     {  
     }  

     public void SomeMethod() 
     { 
      using (var conn = new SqlConnection(
           "Data Source=soniya-9393b956;Initial Catalog=tabby;Integrated Security=True;Pooling=False")) 
      { 
       conn.Open(); 

       using (var cmd = new SqlCommand("select * from students where ID=" + textBox1.Text, conn)) 
       using (var rdr = cmd.ExecuteReader()) 
        while (rdr.Read()) 
        { 
         TextBox1.Text = rdr["id"].ToString(); 
         TextBox2.Text = rdr["name"].ToString(); 
         TextBox3.Text = rdr["class"].ToString().Trim(); 
         TextBox4.Text = rdr["roll"].ToString(); 
         // builder.Append(rdr[0]).Append(Environment.NewLine); 
        }   
       }   
     } 

     protected void Button1_Click(object sender, EventArgs e) 
     { 
      SomeMethod(); 
     } 
    } 
} 
+0

沒有足夠的細節來確切地知道,但可能有一些你從數據庫中產生的字段是NULL? – m0skit0

+5

僅供參考:查看參數化查詢以避免SQL注入攻擊和錯誤。 –

+0

當我選擇*從學生;來自SQL管理工作室 我在表格中得到了正確的值。 但是,當我在文本框中顯示它們。 像40這樣的值在文本框中顯示爲4 – Yahoo

回答

1

阿迪,看着你發送源和數據庫模式後,它看起來像它應該都是工作,我想知道如果你的連接字符串是不正確的,因爲你在我們的SO聊天會話中發送的模式。當我改變了連接字符串到我的主機名和數據庫名稱,它的工作如預期:

「數據源= YourHostName;初始目錄= YourDatabaseName;集成安全性= TRUE;池=假」

您在連接字符串中列出了虎斑,但在您剪切並粘貼在聊天中的模式中,它聲明瞭Use [Demo]作爲數據庫,這導致我認爲它可能是連接字符串問題。

+0

Ya,數據庫名稱是問題,現在iTs已修復,....謝謝 但我只是想知道數據庫名稱是否在第一個地方是錯誤的,那麼爲什麼我可以得到一些條目的值...嗯 反正謝謝!:D – Yahoo

+0

@Adi:我會說最有可能的是,已經有一個來自示例項目或名稱的DB。否則,它應該拋出,如果它找不到它。 –

0

你的字符集匹配嗎?如果C#代碼需要別的東西,那麼來自數據庫的unicode會以NCHAR格式存儲。

+0

我該怎麼做? – Yahoo

+0

那麼如果你使用SQL Server 2008根據這個NCHAR使用的字符集是UCS-2 http://msdn.microsoft.com/en-us/library/ms186939.aspx 如果它的sqlserver 2005可能使用了不同的編碼,很可能是UTF-16,所以它可能不是問題。只是我會研究 和我相信C#默認情況下會使用UTF-16 –

+0

您可能想閱讀Jon Skeets文章,我承認我沒有完全閱讀它,但我需要。我敢打賭,它解決了這個問題。 http://www.yoda.arachsys.com/csharp/strings.html –

-1

可能是您剛纔忘了把你的代碼在適當的括號的SqlCommand和Reader:

using (var cmd = new SqlCommand("select * ... " + textBox1.Text, conn)) 
{ 
    using (var rdr = cmd.ExecuteReader()) 
    { 
     while (rdr.Read()) 
     { 
     ... 
     } 
    } 
} 
+1

不,您可以使用塊堆疊,就像您不需要if上的{}一樣。如果堆疊使用塊,則它包含下一個使用塊,因爲它是正文。使用(x){使用(y){使用(z){}}}與使用(x)使用(y)使用(z){} –

+0

相同我錯誤,當我看到括號丟失時,意識到在它下面只有While塊。雖然它是SqlCommand和閱讀器的標準組合,但我不會使用沒有括號的三個級別的代碼塊,對於可讀性不好:) – Goran