【问题标题】:Passing multiple arguments to a tableadapter using SQL statement使用 SQL 语句将多个参数传递给 tableadapter
【发布时间】:2020-04-14 12:40:35
【问题描述】:

我试图将多个参数传递给 Visual Studio 中的填充 Tableadapter 方法,当我在程序中运行它时出现“方法或操作未实现”错误。我对 C# 有一个模糊的了解,但仍在学习。 VS 在代码中没有发现任何错误,当我在数据集设计器中测试它时,SQL 查询工作得很好。编码对我来说很有意义,我觉得它应该可以工作,但我显然遗漏了一些东西,我终生无法弄清楚它是什么。

这是时间表程序的开始。应该发生的是当用户单击搜索按钮时,它会运行查询并显示结果。该查询采用从下拉框中选择的员工姓名,并显示该员工在从两个日期时间选择器中选择的日期范围内的所有条目。下面是 SQL 语句,如所述在测试时工作正常......然后是按钮单击的代码,这是我必须遗漏的地方。谁能弄清楚我为什么会收到这个错误?

SELECT Customer, Department, Brand, Model, TotalTime, AMPM, InvoiceNumber, Date, Day, TechName, EntryID, Remarks
FROM Entries WHERE TechName = @TechName AND Date BETWEEN @Date1 AND @Date2


        private void searchButton_Click(object sender, EventArgs e)
        {

            if ((techNameComboBox.Text.Length > 0)
            && (dateDateTimePicker.Text.Length > 0)
            && (dateDateTimePicker1.Text.Length > 0))

            try
            {
                this.entriesTableAdapter.FillByDateRange(
                    this.timeSheetEntriesDataSet.Entries, (techNameComboBox.Text, dateDateTimePicker.Text, dateDateTimePicker1.Text));
            }

            catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
          }

【问题讨论】:

  • 您使用的是哪个 dbms? DATE 是一个 ANSI SQL-2016 保留字,也是一些 dbms 产品 (en.wikipedia.org/wiki/SQL_reserved_words)
  • 服务器是否有多个数据库?连接字符串中的默认数据库是什么?如果服务器中有多个数据库,您可以在连接字符串中添加默认数据库或添加到查询“Use Database_Name; Select.........”。
  • 我正在使用最新版本的 SQL Sever Express 和 Management Studio 18。
  • 这是我连接到数据库时创建的连接字符串 Visual Studio

标签: c# sql tableadapter


【解决方案1】:

您现在可能已经解决了这个问题,但如果您的查询是

SELECT Customer, Department, Brand, Model, TotalTime, AMPM, InvoiceNumber, Date, Day, TechName, EntryID, Remarks
FROM Entries 
WHERE TechName = @TechName AND Date BETWEEN @Date1 AND @Date2

在表格适配器中,方法签名将是

FillBy(table, tech name, date1, date2)

但您似乎是通过尝试传递 valuetuple 来调用它

FillByDateRange(this.timeSheetEntriesDataSet.Entries, (techNameComboBox.Text, dateDateTimePicker.Text, dateDateTimePicker1.Text))

首先,删除参数周围的括号。其次,如果数据库中的日期列确实是日期,那么 date1 和 2 的参数将是 c# 日期时间类型,而不是字符串,因此您应该从 datetimepicker 传递值

FillByDateRange(timeSheetEntriesDataSet.Entries, techNameComboBox.Text, dateDateTimePicker.Value, dateDateTimePicker1.Value)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-22
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 2020-11-24
    • 2018-10-04
    • 2016-03-26
    相关资源
    最近更新 更多