【发布时间】:2015-03-17 18:40:12
【问题描述】:
我有一个从 TSql 视图加载 DataGridView 的进程。我的用户之间一直在争论是返回所有行还是返回某个数字(我在后一个阵营:TOP 100)。我决定最好的方法是根据用户设置的字段动态返回行数。我原以为这是一项相当微不足道的任务。我期待加载一个带有 while 循环和读取函数的数据表,并在一定数量的行处停止。这可能吗?将代码保持在下面,但将数据表 (dt) 缩减到所需的行数,然后从那里加载 datagridview 是否有巨大的好处?
public void Load_DGV(DataGridView dgv, string sqlx)
{
DateTime d1 = DateTime.Now;
SqlCommand command = new SqlCommand(sqlx.ToString());
SqlConnection connection = new SqlConnection(Properties.Settings.Default._CONNSTRING);
command.Connection = connection;
bool Success = true;
DataTable dt = new DataTable();
connection.Open();
SqlDataReader reader = command.ExecuteReader();
dt.Load(command.ExecuteReader());
connection.Close();
dgv.DataSource = null;
dgv.DataSource = dt;
Color_DGV(dgvProposal);
dgvProposal.Sort(dgvProposal.Columns[m_Current_Menu_Item.OrderByCol], ListSortDirection.Descending);
DateTime d2 = DateTime.Now;
Console.WriteLine("Execution of " + sqlx + " took " + (d2 - d1).Seconds.ToString() + "s. ");
}
【问题讨论】:
-
这可能是解决这种情况的最佳方法。不幸的是,我的查询绝对庞大,需要经常更新,所以我把它放在一个不能有参数的视图中。另一种选择是存储过程,这是我的最坏情况。感谢您的想法!
-
一个视图支持top x
-
是的。但它不支持参数。我返回的行在运行时必须是动态的
-
视图不支持参数? Where 子句怎么样? ADO.NET 本身支持参数化 SQL 字符串,而无需创建存储过程。 stackoverflow.com/questions/542510/…
-
是的,但我不想在我的代码中硬编码 82 行 sql 查询,因为我需要更改它。到目前为止,我读到的所有内容都是视图并不容易原生地支持参数。您的建议是我认为我将为存储过程做的事情。 stackoverflow.com/questions/1687279/…
标签: c# tsql datagridview