Member 11572517 Ответов: 1

Ошибка в использовании кода ежемесячного отчета crystal report?


Я хочу сделать ежемесячный отчет о событии нажатия кнопки и отобразить его через crystal report.
tc_np = имя элемента управления tab
tbprint = имя вкладки, куда я поместил crystalreportviewer.
mnt = is crystal report, где я определяю или проектирую в соответствии с таблицей patient_info
crv = - это имя crystalreportviewer.

private void mntbtn_Click(object sender, EventArgs e)
        {
            tc_np.SelectedTab = tbprint;
            try
            {
                cn.Open();
                DataSet ds2 = new DataSet();
                //SELECT * FROM MyTable WHERE DATEDIFF(mm, MyDateColumn, GETDATE()) = 0
                mnt m = new mnt();
                OleDbCommand cmdmnt = new OleDbCommand("select * from patient_info where DATEDIFF(m, E_date, DATE())=0",cn);
                OleDbDataAdapter da = new OleDbDataAdapter(cmdmnt);
                da.Fill(ds2, "patient_info");
                m.SetDataSource(ds2.Tables["patient_info"]);
                crv.ReportSource = m;
                crv.RefreshReport();
                cn.Close();
            }
            catch (Exception p)
            {
                MessageBox.Show(p.Message,"error",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }

        }


ошибка при:
da.Fill(ds2, "patient_info")

ошибка: "нет значения для одного или нескольких обязательных параметров"


Что я уже пробовал:

я попробовал множество изменений в дату(), даст условие, как функция datediff(мм,E_date,дата())=30, и т. д.

[no name]

Основываясь на вашем недостатке информации здесь, я полностью и полностью предполагаю, что "М", передаваемое DateDiff, - это не то, что вы думаете.

1 Ответов

Рейтинг:
1

Suvendu Shekhar Giri

Если ваша СУБД-это SQL Server, то попробуйте GETDATE() вместо DATE(), потому что такой функции нет. GETDATE () используется для получения текущей даты сервера БД.

OleDbCommand cmdmnt = new OleDbCommand("select * from patient_info where DATEDIFF(m, E_date, GETDATE())=0",cn);


Надеюсь, это поможет :)
Пожалуйста, дайте мне знать, если я что-то здесь упустил.