当存储过程带有参数时,我的listView不会显示结果。ListView应显示所选帐户的交易。
我使用的代码在使用不同的存储过程且无参数运行时可以完美地工作。我检查了数据库上的存储过程,并按照其应有的方式工作,显示了所选帐户的交易。
transactionListView.Items.Clear();
SqlConnection sql = new SqlConnection(@"Server=.DANIELSQL;Database=Accounts;Trusted_Connection=True;");
sql.Open();
SqlCommand com = new SqlCommand("spTransactionTable_GetTransactionDetails_ByAccount", sql);
com.CommandType = CommandType.StoredProcedure;
com.Parameters.AddWithValue("@AccountName", accountNameChoice.SelectedItem.ToString());
SqlDataAdapter da = new SqlDataAdapter(com);
DataTable dt = new DataTable();
da.Fill(dt);
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow dr = dt.Rows[i];
if (dr.RowState != DataRowState.Deleted)
{
ListViewItem lvi = new ListViewItem(dr["TransactionID"].ToString());
lvi.SubItems.Add(dr["AccountName"].ToString());
lvi.SubItems.Add(dr["TransactionAmount"].ToString());
lvi.SubItems.Add(dr["Category"].ToString());
lvi.SubItems.Add(dr["DateValue"].ToString());
lvi.SubItems.Add(dr["IncomeOrExpenditure"].ToString());
transactionListView.Items.Add(lvi);
}
}
sql.Close();
当我运行无参数存储过程时,显示了所有记录。当我运行参数化的存储过程时,什么都没有显示。
我疲倦地将断点从两个存储过程开始。当它到达for循环时,在非参数化的存储过程中,它说它充满了3,这是有多少交易。在参数化的存储过程中,它说它充满了0。
如果accountNameChoice.SelectedItem.ToString()
显示了类的名称,则需要确定类是什么,该类的哪个属性代表帐户名称。
将值传递给存储过程时可能是什么样子:
((Account)accountNameChoice.SelectedItem).Name
如果您有这样的课程,例如:
public class Account
{
public string Name { get; set; }
}
尝试使用您在SSMS中的输入执行存储过程,并检查是否返回任何结果。