C# 从DataReader正确加载DataGridView
阅读文档时,我的印象是以下代码可以工作:C# 从DataReader正确加载DataGridView,c#,datagridview,sqldatareader,sqldataadapter,C#,Datagridview,Sqldatareader,Sqldataadapter,阅读文档时,我的印象是以下代码可以工作: using (SqlConnection con = new SqlConnection(Properties.Settings.Default.C_Str)) { try { using (SqlCommand cmd = new SqlCommand("PerformSearch", con)) { cmd.CommandT
using (SqlConnection con = new SqlConnection(Properties.Settings.Default.C_Str))
{
try
{
using (SqlCommand cmd = new SqlCommand("PerformSearch", con))
{
cmd.CommandType = CommandType.StoredProcedure;
string SearchString = textBoxSearchSting.Text;
cmd.Parameters.Add("SearchString", SqlDbType.VarChar).Value = SearchString;
con.Open();
dataGridView1.DataSource = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
}
catch (Exception) { throw; }
finally { con.Close(); }
}
或者我至少可以使用以下内容:
using (SqlConnection con = new SqlConnection(Properties.Settings.Default.C_Str))
{
try
{
using (SqlCommand cmd = new SqlCommand("PerformSearch", con))
{
cmd.CommandType = CommandType.StoredProcedure;
string SearchString = textBoxSearchSting.Text;
cmd.Parameters.Add("SearchString", SqlDbType.VarChar).Value = SearchString;
con.Open();
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
dataGridView1.DataSource = reader;
}
}
catch (Exception) { throw; }
finally { con.Close(); }
}
但是尼瑟没有完成上述工作。使用下面的代码确实有效,但使用相同的搜索值,下面的代码是用我的查询填充datagridview的最佳方法吗?为什么上述两种方法都不行呢
using (SqlConnection con = new SqlConnection(Properties.Settings.Default.C_Str))
{
try
{
using (SqlCommand cmd = new SqlCommand("PerformSearch", con))
{
cmd.CommandType = CommandType.StoredProcedure;
string SearchString = textBoxSearchSting.Text;
cmd.Parameters.Add("SearchString", SqlDbType.VarChar).Value = SearchString;
con.Open();
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection));
if (dt.Rows.Count > 0 && dt != null)
{
dataGridView1.DataSource = dt;
}
}
}
catch (Exception) { throw; }
finally { con.Close(); }
}
下面的方法同样有效,出于任何原因,使用数据适配器会更好吗
using (SqlConnection con = new SqlConnection(Properties.Settings.Default.C_Str))
{
try
{
using (SqlCommand cmd = new SqlCommand("PerformSearch", con))
{
cmd.CommandType = CommandType.StoredProcedure;
string SearchString = textBoxSearchSting.Text;
cmd.Parameters.Add("SearchString", SqlDbType.VarChar).Value = SearchString;
DataTable dt = new DataTable();
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
con.Open();
da.Fill(dt);
if (dt.Rows.Count > 0 && dt != null)
{
dataGridView1.DataSource = dt;
}
}
}
}
catch (Exception) { throw; }
finally { con.Close(); }
}
提示一下,我想using语句会关闭连接。@krekkon在这种情况下,它会,但我只是喜欢在任何时候都保留一个封闭的语句,以防将来我更改某些内容或停止使用这些语句,我不想意外地忘记这一切。对于第一个有效的解决方案,您需要两个
using
语句。对于第二个,您需要三个。User214。。。正如您所想,如果这对您更好,那么好吧;)