无法根据条件列出数据网格

时间:2013-06-19 07:25:31

标签: c# winforms sql-server-2008-r2

[已解决] - 必须将Id @更改为@Id。写错了。

我有此申请注册GYM会员及其付款。在MembersDataGridView上,当您双击行标题时,PaymentsDataGridView将打开并显示付款列表。现在我可以完美列出所有付款,但我只想列出特定会员的付款。 Payments Id等于Members Id。 因此,如果会员的ID为100,则他/她的所有付款ID都为100。

我正在使用此代码来调用数据库中的付款:

        public List<Payment> ListPayments(Payment entity)
        {
            List<Payment> Payments = new List<Payment>();

            string SELECT = "SELECT * FROM Payments WHERE Id = Id@";

            using (sqlConnection = new SqlConnection(sqlConnectionString_WORK))
            {
                sqlConnection.Open();

                using (SqlCommand sqlCommand = new SqlCommand(SELECT, sqlConnection))
                {
                    sqlCommand.Parameters.Add("@Id", SqlDbType.Int).Value = entity.Id;

                    var sqlReader = sqlCommand.ExecuteReader();

                    while (sqlReader.Read())
                    {
                        var payment = new Payment
                        {
                            Id = Convert.ToInt32(sqlReader["Id"]),
                            Amount = Convert.ToDecimal(sqlReader["Amount"]),
                            StartDay = Convert.ToDateTime(sqlReader["StartDay"]),
                            EndDay = Convert.ToDateTime(sqlReader["EndDay"])
                        };

                        Payments.Add(payment);
                    }
                }
            }

            return Payments;
        }

我在PaymentsForm上使用它:

private void PaymentsForm_Load(object sender, EventArgs e)
{
    var payment = new Payment
    {
        Id = IdTextBox.Text.ToIntOrZero()
    };

    PaymentsDataGridView.DataSource = Connection.ListPayments(payment);
}

PaymentsForm包含会员信息的文本框。并且IdTextBox包含成员的Id,从中我获得Id以列出所有付款。现在当我尝试列出会员的付款时,我在var sqlReader = sqlCommand.ExecuteReader();部分得到了这个例外:

  

SQLException未处理。

     

列名'Id @'无效。

知道我做错了吗?

1 个答案:

答案 0 :(得分:2)

语法错误:将Id@更改为@Id 这样:

string SELECT = "SELECT * FROM Payments WHERE Id = @Id";