C# 尝试使用c从数据库返回记录#
这是我的代码,我试图通过输入不同的ID将记录返回listview。但不管我输入哪一个ID,我似乎都只能找回第一张唱片。任何帮助都将不胜感激C# 尝试使用c从数据库返回记录#,c#,sql,database,C#,Sql,Database,这是我的代码,我试图通过输入不同的ID将记录返回listview。但不管我输入哪一个ID,我似乎都只能找回第一张唱片。任何帮助都将不胜感激 private void FindRecord() { List<SprocParameter> paramsSQL = new List<SprocParameter>(); paramsSQL.Add(new SprocParameter("ID", textBoxI
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";
}
}
private void FindRecord()
{
List paramsSQL=新列表();
添加(新的存储过程参数(“ID”,textBoxID.Text));
数据集ds=StoredProcedureExecute(“获取ID”,参数SQL);
如果(null!=ds&&ds.Tables.Count>0&&ds.Tables[0].Rows.Count>0)
{
textBoxID.Text=ds.Tables[0]。行[0][“ID”]。ToString();
textBoxName.Text=ds.Tables[0]。行[0][“名称”]。ToString();
textBoxAddress.Text=ds.Tables[0]。行[0]
[“地址”].ToString();
textBoxPhone.Text=ds.Tables[0]。行[0][“Phone”]。ToString();
}
其他的
{
textBoxID.Text=“无法识别的ID”;
textBoxName.Text=“名称不正确”;
textBoxAddress.Text=“地址错误”;
textBoxPhone.Text=“无效号码”;
}
}
您的目标在这里并不完全清楚,因为您似乎在询问如何处理多行,但将这些值分配给一个文本框,该文本框会提示您实际上一次只需要一行。我建议执行命令存储过程是一种更可读的方式:
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();
}
}
因为您仅通过使用
ds.Tables[0].Rows[0][“ID”]
获取第一条记录,如果我们不知道get\u ID
是什么,不知道StoredProcedureExecute
做了什么,也不知道如何(以及为什么)SprocParameter
包装事情,那么就很难判断出问题。这些不是框架类。向下搜索,直到找到实际的SqlCommand
code(或者更可能是DataAdapter
)。除了只使用行[0]
,您似乎正在将数据分配给文本框
es-而不是列表视图
。你有没有碰巧共享了错误的代码片段?如果只有一个textBoxID.Text
,您能解释一下如何输入“不同的ID”吗?