我从未使用过ADO.NET。 如果我手动执行,我有一个存储过程,它接受学生编号并返回一个学生。
如果我在我的代码中执行它,它将返回所有6000名学生。在代码中执行有什么不同?
DataTable dt = new DataTable();
using (SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["My_DB"].ConnectionString.ToString()))
{
using (SqlCommand cmd = new SqlCommand("sk.My_StoredProc", con))
{
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
cmd.CommandType = CommandType.StoredProcedure;
//Add Parameter values
cmd.Parameters.Add("@StudentNumber", SqlDbType.VarChar).Value = studentNumber;
cmd.Parameters.Add("@StudentNameFragment", SqlDbType.VarChar).Value = studentNameFragment;
cmd.Parameters.Add("@SchoolYear", SqlDbType.VarChar).Value = this.schoolYr;
con.Open();
cmd.ExecuteNonQuery();
da.Fill(dt);
}
}
}
return dt;
答案 0 :(得分:0)
尝试使用SqlDataReader而不是ExecuteNonQuery,如下所示:
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dr);
ExecuteReader允许您从SQLCommand中读取结果集。
ExecuteNonQuery只返回一个整数值,表示受该命令影响的数据库中的行数。
答案 1 :(得分:0)
想出来,第二个参数'StudentNameFragment'作为空字符串而不是null传递,所以它返回了所有内容。
答案 2 :(得分:-2)
ExecuteNonQuery - 实际上不应该与SELECT一起使用 - 只更新,插入或删除。并且它不会返回行...根据MSDN - 请参阅下面的链接