尝试使用c#

时间:2018-08-13 09:10:12

标签: c# sql database

这是我的代码,我试图通过输入不同的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";
           }
       }

1 个答案:

答案 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();
    }
}