C# 尝试使用c从数据库返回记录#

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

这是我的代码,我试图通过输入不同的ID将记录返回listview。但不管我输入哪一个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";
           }
       }
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”吗?