C#visual studio 2012专业asp.net
我有一个包含用户名的表:Josh,Jeremy,Jared,Justin ......
我创建了一个网页gridview,显示整个表格,但我只想让它显示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();
我应该创建一个桌面视图吗?我试过但没有成功。
提示?
答案 0 :(得分:2)
如果您尝试选择前10个名称,那么您需要将SQL Select更改为以下内容:
cmd.CommandText = "SELECT TOP 10 * FROM Transactions WHERE FName=@paramFName";
那是你所追求的吗?
修改
好的,所以你实际上并没有在任何地方显示你的实际问题。
您需要创建一个数据表并在gridview中显示它。
查看以下链接以获取示例:
答案 1 :(得分:2)
您只是错过了参数名称中的"@"
:
SqlParameter uName = new SqlParameter("@paramFName", Account.Text);
如果你的where子句,这会导致你没有为指定的参数提供任何内容,只是让查询提供者忽略这个条件,从而产生有效的查询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
,则可以使用SqlDataAdapter
代替使用数据阅读器:
using (var adapter = new SqlDataAdapter(cmd))
{
var dataTable = new DataTable();
dataTable.TableName = "QueryResult";
adapter.Fill(dataTable);
return dataTable;
}
答案 2 :(得分:0)
您的代码似乎没问题,但您没有提供太多信息。
如果您使用的是SQL Server 2012,请查看关键字OFFSET and FETCH。 对于早期版本,您需要使用ROW_NUMBER OVER PARTITION
作为一种好的做法,您应该始终限制返回的元素数量。