这是我的代码,我试图通过输入不同的ID将记录返回到列表视图中。但是无论我输入哪个ID,我似乎都只会获得第一条记录。任何帮助将不胜感激。
private void FindRecord()
{
List<SprocParameter> paramsSQL = new List<SprocParameter>();
paramsSQL.Add(new SprocParameter("ID", textBoxID.Text) );
DataSet ds = StoredProcedureExecute("get_ID", paramsSQL );
if (null != ds && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
textBoxID.Text = ds.Tables[0].Rows[0]["ID"].ToString();
textBoxName.Text = ds.Tables[0].Rows[0]["Name"].ToString();
textBoxAddress.Text = ds.Tables[0].Rows[0]
["Address"].ToString();
textBoxPhone.Text = ds.Tables[0].Rows[0]["Phone"].ToString();
}
else
{
textBoxID.Text = "Unrecognised ID";
textBoxName.Text = "Incorrect Name";
textBoxAddress.Text = "Wrong Address";
textBoxPhone.Text = "Invalid Number";
}
}
答案 0 :(得分:0)
此处的目标尚不完全清楚,因为您似乎在询问如何处理多行,但将这些值分配给文本框可能会建议您一次只想要一个。我可以建议执行命令存储过程是一种更具可读性的方法:
DataSet ds = new DataSet("peopleData");
using(SqlConnection conn = new SqlConnection("ConnectionString"))
{
SqlCommand sqlComm = new SqlCommand("get_ID", conn);
sqlComm.Parameters.AddWithValue("@ID", textBoxID.Text);
sqlComm.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = sqlComm;
da.Fill(ds);
}
然后可以使用类似这样的方式访问数据,将单行输出到文本框:
DataRow dr = ds.Tables[0].Rows[0]; // This will access the first row
textBoxName.Text = dr["Name"].ToString();
或者,如果您期望存储过程返回许多行,则可以通过执行以下操作来遍历它们。尽管在这种情况下,我怀疑您不想直接将每个值分配给文本框,所以按照注释中的建议部署ListView可能更合适。
foreach (DataTable dt in ds.Tables) // Only if you're expecting many datatables.
{
foreach (DataRow dr in dt.Rows)
{
textBoxName.Text = dr["Name"].ToString();
}
}