我从来没有使用过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;发布于 2015-01-27 08:01:03
尝试使用SqlDataReader而不是ExecuteNonQuery,如下所示:
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dr);ExecuteReader将允许您从SQLCommand中读取结果集。
ExecuteNonQuery将仅返回一个整数值,表示数据库中受该命令影响的行数。
发布于 2015-01-30 07:26:02
弄清楚了,第二个参数'StudentNameFragment‘是作为空字符串传递的,而不是null,所以它会返回所有内容。
发布于 2015-01-27 07:32:48
ExecuteNonQuery -实际上不应该与SELECT - only update,insert或delete一起使用。并且它不会将rows...according返回给MSDN -请参阅下面的链接
https://stackoverflow.com/questions/28160623
复制相似问题