我希望用户能够在我的网站上看到他们所有的测验。这些列表保存在SQLite数据库中,其中包含一个列"测验名称"和一列"用户名"。
它应该如下工作:
1。用户在文本框中键入用户名
2。该脚本打印由在文本框中键入的用户创建的所有测验名称。 (就像' user1'
3。名称打印在列表中。
示例
1。用户在文本框中键入我的用户名:
2.脚本扫描" gebruiker" " eliasgroot"的专栏。
我不想要" user1" 创建的测验中的测验名称
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>
答案 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;
}