【问题标题】:Display data from a database without specifying columns显示数据库中的数据而不指定列
【发布时间】:2012-12-31 21:21:55
【问题描述】:

我有一个简单的登录页面。我想要做的是当登录正确时,我想显示所有列 - 我不想手动指定在 while 循环中显示哪些列。

这是我在 C# 中使用 SQL Server 2008 express 的示例:

private void Authenticate(string userName, string password)
{
    string connString = "server=.\\sqlexpress; database=TestDatabase; trusted_connection=true";
    SqlConnection conn = new SqlConnection(connString);
    conn.Open();

    string sqlCommand = "select * from Registration where UserName='" + userName + "' and   Password='" + password + "'";
    SqlCommand command = conn.CreateCommand();
    command.CommandText = sqlCommand;

    SqlDataReader reader = command.ExecuteReader();          

    while (reader.Read())
    {
        lblResult.Text += reader["CourseId"] + " " + reader["CourseName"] + " " + reader["Instructor"] + "<br />";
    }

}

我知道这不是最好的实现方式。

如何使用从注册表返回的所有内容填充 lblResult?

【问题讨论】:

  • LINQ + DataSource 也许?
  • 你可以通过它的序数位置访问阅读器[]
  • 其中 UserName='" + userName + "' --- 真的吗?谷歌 SqlParameters
  • 您当前的实现容易受到 SQL 注入攻击!请阅读有关该主题的 MSDN 文章:[SQL 注入] (msdn.microsoft.com/en-us/library/ms161953.aspx)
  • @Alexander 你将如何更改代码以避免 SQL 注入攻击?

标签: c# sql-server sql-server-2008 c#-4.0 login


【解决方案1】:
StringBuilder sb = new StringBuilder(1024); /* arbitrary size */
while (reader.read())
{
    for (int i = 0; i < reader.FieldCount; i++)
    {
        sb.Append(reader.GetName(i));
        sb.Append(": ");
        sb.Append(reader[i]);
    }
    sb.Append("<br />");
}
lblResult.Text = sb.ToString();

类似的东西,基于MSDN docs

【讨论】:

    【解决方案2】:

    SqlDataReader 有一个名为 FieldCount 的属性,它告诉您返回了多少字段,然后您只需使用该知识遍历 Items 索引。我还将使用StringBuilder 来构建结果字符串,而不是连接字符串来提高性能。像这样的:

    var str = new StringBuilder()
    while (reader.Read())
    {
        for(int i=0; i<reader.FieldCount ; i++)
        {
            str.Append(reader[i].ToString());
            str.Append(" ");
        }
        str.Append("<br/>");    
    }
    lblResult.Text = str.ToString();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 2017-01-20
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      相关资源
      最近更新 更多