【问题标题】:C#/DataTable/DataGrid/SQL - How can I insert Params into a stored procedure from DataGridViewC#/DataTable/DataGrid/SQL - 如何从 DataGridView 将参数插入存储过程
【发布时间】:2020-05-22 07:24:21
【问题描述】:

感谢您抽出宝贵时间阅读本文。基本上我要做的是返回通过存储过程从数据库中提取的 [问题] 的详细信息

有 2 个参数,[IssueNo][LineNo]。当我单击一个按钮时,程序需要返回详细信息,例如:我选择的每个 DataGridRow 的 ItemName、Code 等,但它当前所做的是返回 LAST [Issues] 详细信息,而不是我在网格中选择的详细信息。

我知道我的存储过程是正确的,但是在我的 C# 代码中的某个地方,参数没有得到我选择的每一行的值。只有一个,它仍然是错误的

foreach (DataRow dr in dataGridView2.SelectedRows)
{
    IssueNo = Convert.ToInt32(dr[0].ToString());
    TranLineNo = Convert.ToInt32(dr[1].ToString()); 
}

detailsCmd.Parameters.AddWithValue("IssueNo", IssueNo);
detailsCmd.Parameters.AddWithValue("TranLineNo", TranLineNo);
DetailsIssue details1 = new DetailsIssue();

SqlDataAdapter Idetails = new SqlDataAdapter(detailsCmd);
Idetails.Fill(detailsReturned);

details1.dgvIssuesDetail.DataSource = detailsReturned;
details1.Show();

这是查找存储过程参数的代码。

https://prnt.sc/qybxvs 这是应用程序的外观,红色是选定的行,单击后单击的详细信息按钮会将黑色的 IssueNo 和 TranLineNo 传递给存储过程,然后返回问题的详细信息选择。它返回正确的数据想法,但针对错误的问题。如果我选择多行,它仍然只返回一个

如果您需要任何其他附加信息,请随时询问。我耐心等待您的回复

【问题讨论】:

  • 首先你传递的不是“@”,这是无效的。请使用 detailsCmd.Parameters.AddWithValue("@IssueNo", IssueNo);其次,您的提及链接不起作用“prnt.sc/qybxvs
  • @MashhadSaleem 我在没有'@' 的情况下通过的速度没有区别,我可能没有 7 年的经验,正如你的个人资料中所说的,但我的代码没有问题,因为我确实得到了它可以按照我希望的方式工作,参考链接也可以工作,我只是再次检查了它,但不再需要它。感谢您的宝贵时间

标签: c# asp.net .net sql-server stored-procedures


【解决方案1】:

所以我不确定我是如何修复它的,但这是我所做的更改,现在它可以工作了,所以对于有相同问题的任何人来说,这就是我为解决上述问题所做的,也许有人可以解释我做得更好的地方我做不到

DataTable issueView = new DataTable();
SqlConnection issueConn = new SqlConnection(GetConnectionString());
issueConn.Open();
SqlCommand issueCmd = new SqlCommand("sp_Populate_Issue_View", issueConn)
{
    CommandType = CommandType.StoredProcedure
};
if (chkHideReturned.Checked == true)
{
    issueCmd.Parameters.AddWithValue("Codefrom", 100);
    issueCmd.Parameters.AddWithValue("Codeto", 100);

}
else
{
    issueCmd.Parameters.AddWithValue("Codefrom", 100);
    issueCmd.Parameters.AddWithValue("Codeto", 120);
}
SqlDataAdapter da2 = new SqlDataAdapter(issueCmd);
da2.Fill(issueView);
dataGridView2.DataSource = issueView;

【讨论】:

  • 你可能想阅读thisthis
  • 我以前见过这些,我知道 sp_ 不是必需的,但它是我们公司构建 StoredProcs 的方式,所以我只是跟随领导。和 AddWithValue,我使用它是因为在代码的更高层我已经定义了数据类型,所以在解析为 SQL 时没有问题,我还在需要的地方使用了 Convert.To*** 函数
  • 您还应该将连接对象包装在 USING 语句中,以便正确关闭和处理它们。但很高兴您找到了适合您的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 2021-07-30
  • 1970-01-01
相关资源
最近更新 更多