C# ListView 不使用存储过程和参数显示数据库结果
C# ListView is not displaying database results using stored procedure and parameter
当存储过程 运行 带有参数时,我的列表视图不显示结果。列表视图应显示所选帐户的 t运行 操作。
当 运行 使用不同的存储过程且没有参数时,我使用的代码完美运行。我检查了数据库上的存储过程,它按应有的方式工作,显示了所选帐户的 t运行sactions。
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();
当我运行无参数存储过程时,所有的记录都显示出来了。当我 运行 参数化存储过程时,什么都不显示。
我厌倦了在两个存储过程上从 SqlDataAdapter 开始放置断点。当它到达 for 循环时,在非参数化存储过程上它说它填充了 3,这是有多少 t运行sactions。在参数化存储过程上,它说它填充了 0.
尝试使用您在 SSMS 中的输入执行您的存储过程,并检查它是否返回任何结果。
如果accountNameChoice.SelectedItem.ToString()
显示的是class的名字,你需要弄清楚class是什么,[=19=是哪个属性 ]代表账户名。
将值传递给存储过程时的示例:
((Account)accountNameChoice.SelectedItem).Name
如果您有一个 class 就是这种情况,例如:
public class Account
{
public string Name { get; set; }
}
当存储过程 运行 带有参数时,我的列表视图不显示结果。列表视图应显示所选帐户的 t运行 操作。
当 运行 使用不同的存储过程且没有参数时,我使用的代码完美运行。我检查了数据库上的存储过程,它按应有的方式工作,显示了所选帐户的 t运行sactions。
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();
当我运行无参数存储过程时,所有的记录都显示出来了。当我 运行 参数化存储过程时,什么都不显示。
我厌倦了在两个存储过程上从 SqlDataAdapter 开始放置断点。当它到达 for 循环时,在非参数化存储过程上它说它填充了 3,这是有多少 t运行sactions。在参数化存储过程上,它说它填充了 0.
尝试使用您在 SSMS 中的输入执行您的存储过程,并检查它是否返回任何结果。
如果accountNameChoice.SelectedItem.ToString()
显示的是class的名字,你需要弄清楚class是什么,[=19=是哪个属性 ]代表账户名。
将值传递给存储过程时的示例:
((Account)accountNameChoice.SelectedItem).Name
如果您有一个 class 就是这种情况,例如:
public class Account
{
public string Name { get; set; }
}