2011-11-02 81 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