3

C# Visual Studio 2012 专业版 asp.net

我有一个包含用户名的表:Josh、Jeremy、Jared、Justin...

我创建了一个显示整个表格的网页网格视图,但我只希望它显示贾斯汀而不是其他任何东西。

我该怎么做呢?

这是一些不起作用的代码:

SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True");
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    SqlDataReader rs;

    con.Open();

    SqlParameter uName = new SqlParameter("paramFName", Account.Text);

    cmd.Parameters.Add(uName);

    cmd.CommandText = "SELECT * FROM Transactions WHERE FName=@paramFName";
    rs = cmd.ExecuteReader();

    cmd.Parameters.Clear();
    rs.Close();

我应该创建表格的视图吗?我试过但没有成功。

提示?

4

3 回答 3

2

您只是错过了"@"at 参数名称:

SqlParameter uName = new SqlParameter("@paramFName", Account.Text);

如果您使用 where 子句,这意味着您没有为指定的参数提供任何内容,这只会让查询提供者忽略此条件,从而导致有效的 query SELECT * FROM Transactions

除此之外,您应该考虑使用该using块:

using (SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True"))
using (SqlCommand cmd = new SqlCommand())
{
    cmd.Connection = con;
    cmd.CommandText = "SELECT * FROM Transactions WHERE FName=@paramFName";
    cmd.Parameters.AddWithValue("@paramFName", Account.Text);

    con.Open();
    using (var rs = cmd.ExecuteReader())
    {
        //ToDo: Do something with the reader.
    }
}

还有另一个提示:如果你需要DataTable用结果填充 a,你可以使用 aSqlDataAdapter而不是使用数据阅读器:

using (var adapter = new SqlDataAdapter(cmd))
{
    var dataTable = new DataTable();
    dataTable.TableName = "QueryResult";
    adapter.Fill(dataTable);

    return dataTable;
}
于 2013-06-07T08:50:52.197 回答
2

例如,如果您尝试选择前 10 个名称,则需要将 SQL Select 更改为以下内容:

cmd.CommandText = "SELECT TOP 10 * FROM Transactions WHERE FName=@paramFName";

那是你所追求的吗?

编辑

好的,所以您实际上并没有在任何地方显示您的数据,这是实际问题。

您需要创建一个数据表并将其显示在网格视图中。

查看以下链接以获取示例:

网格视图示例

MSDN 网格视图示例

于 2013-06-07T08:39:44.753 回答
0

尽管您没有提供太多信息,但您的代码似乎还不错。

如果您使用的是 SQL Server 2012,请查看关键字OFFSET 和 FETCH。对于早期版本,您需要使用ROW_NUMBER OVER PARTITION

作为一种好的做法,您应该始终限制返回的元素数量。

于 2013-06-07T08:53:02.940 回答