将SQLite表中的所有数据打印为单个字符串

时间:2017-05-14 17:53:45

标签: c# sql asp.net database sqlite

我希望用户能够在我的网站上看到他们所有的测验。这些列表保存在SQLite数据库中,其中包含一个列"测验名称"和一列"用户名"。
它应该如下工作:
1。用户在文本框中键入用户名
2。该脚本打印由在文本框中键入的用户创建的所有测验名称。 (就像' user1'
3。名称打印在列表中。


示例
1。用户在文本框中键入我的用户名: user textbox
2.脚本扫描" gebruiker" " eliasgroot"的专栏。  我不想要" user1" enter image description here创建的测验中的测验名称
3。测验中的名称打印在列表中。所以在这个例子中它看起来像:

  

eliasgroot创建的测验:   
1。测验英语   
2。测验法语


解决方案
我使用的脚本可以将一个测验名称变成一个字符串。但它不会打印列中的所有数据。所以它只打印:

  

eliasgroot创建的测验:   
测验英语

它将此名称打印到一个名为" vertaling"的字符串中。但是当我在网上搜索时,我发现很多关于使用列表的文章。不知道这是如何工作的。 有没有办法让它像示例一样工作?
PS和旁边,有没有办法使文本框中的输入不区分大小写?例如当用户输入EliasGroot而不是eliasgroot时,他会得到相同的结果吗?


提前致谢,Elias
我的代码:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Data.SQLite;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

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

    }
    protected void btnTest_Click(object sender, EventArgs e)
    {

        string connectionString =
         @"Data Source=C:/Users/elias/Documents/Visual Studio 2017/WebSites/WebSite7/App_Data/overhoren.db";

        using (var conn = new System.Data.SQLite.SQLiteConnection(connectionString))
        {
            conn.Open();

               //defines the "woord" string which contains the username the 
               //user typed in
            string woord = TextBox1.Text;

              //defines the "geenvertaling" string which is displayed if no 
              //quizzes are found in the database.
            string geenvertaling = "er is geen vertaling gevonden";


            using (var command = new System.Data.SQLite.SQLiteCommand(conn))
            {
                command.Connection = conn;

                command.Parameters.AddWithValue("@woord", woord);

                //searches the database for quizzes (vertaling) for the 
                //username that is equal to @woord (typed in the textbox by 
                //user.
                command.CommandText =
                   @"SELECT[vertaling], [woord] FROM[tbWoorden] WHERE[gebruiker] = @woord";


                using (var reader = command.ExecuteReader())
                {

                    string vertaling = "";
                    if (reader.Read())
                        vertaling = $"{reader["vertaling"]}";

                //checks weither or not there are found quizzes according to 
                //the username typed in and then prints an error message or 
                //the quizzes name.
                    if (vertaling == "")
                    {
                        lblTest.Text = geenvertaling;
                    }
                    else
                    {
                        lblTest.Text = vertaling;
                    }


                }


            }
            }
    }



    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    protected void grdMijnLijsten_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    protected void TextBox1_TextChanged(object sender, EventArgs e)
    {

    }
}


更新
似乎中继器是完美的解决方案。我跟着this article并更改了web.config中的路径和连接字符串。它仍然给出错误:找不到网络路径。
我认为这是一个SQL / SQLite问题,但我不熟悉它,也不知道我做错了什么。我的代码如下:

 <asp:Repeater ID="Repeater1" runat="server" 
          DataSourceID="SqlDataSource1">
          <HeaderTemplate>
              <table>
              <tr>
                 <th>Name</th>
                 <th>Description</th>
              </tr>
          </HeaderTemplate>

          <ItemTemplate>
          <tr>
              <td bgcolor="#CCFFCC">
                <asp:Label runat="server" ID="Label1" 
                    text='<%# Eval("vertaling") %>' />
              </td>
              <td bgcolor="#CCFFCC">
                  <asp:Label runat="server" ID="Label2" 
                      text='<%# Eval("woord") %>' />
              </td>
          </tr>
          </ItemTemplate>

          <AlternatingItemTemplate>
          <tr>
              <td >
                <asp:Label runat="server" ID="Label3" 
                    text='<%# Eval("vertaling") %>' />
              </td>
              <td >
                 <asp:Label runat="server" ID="Label4" 
                     text='<%# Eval("woord") %>' />
              </td>
          </tr>
          </AlternatingItemTemplate>

          <FooterTemplate>
              </table>
          </FooterTemplate>
      </asp:Repeater>

      <asp:SqlDataSource 
          ConnectionString=
              "<%$ ConnectionStrings:NorthwindConnectionString %>"
          ID="SqlDataSource1" runat="server" 
          SelectCommand="SELECT [woord], [vertaling] FROM [tbWoorden]">
      </asp:SqlDataSource>

这是我的web.config代码段:

<connectionStrings>   
 <add
      name="NorthwindConnectionString"
      connectionString="Data Source=C:/Users/elias/Documents/Visual Studio 2017/WebSites/WebSite7/App_Data/overhoren.db" />
  </connectionStrings>

1 个答案:

答案 0 :(得分:1)

我不确定,但在代码中我看到你正在阅读读者对象返回的Resultset中的一行。

你应该尝试类似下面的内容来读取循环中的所有行:

StringBuilder listSB = new StringBuilder();
int lineNumber = 0;
while(reader.Read()) 
{
    lineNumber++; 
    string vertaling = "";
    if (reader.Read()) 
    {
        vertaling = $"{reader["vertaling"]}";
    }

    if (!vertaling.Equals(""))
    {
        listSB.Append(listSB.Length > 0 ? "\n": "").Append(lineNumber).Append(". ").Append(vertaling);
    }
}

if (listSB.Length > 0)
{
    lblTest.Text = listSB.ToString();
}
else 
{
    lblTest.Text = geenvertaling;
}