0

データベースからデータを読み取り、日時ピッカーから選択された日付をクエリの値として渡そうとしています。間違ったデータ型が原因で、あらゆる種類のエラー メッセージが表示され続けていると思います。

ここで何が間違っていますか??

助けてください。

P

            private void buttonRetrieveData_Click(object sender, EventArgs e)
    {
        openConnection();

        //TODO: Add function te retrieve data between dates enteren in datetimepickers
        DateTime datumVan = dateTimePickerVan.Value;

        DateTime datumTot = dateTimePickerTot.Value;

        string query = "select * from my_Table where date between '" + datumVan.ToShortDateString() + "' and '" + datumTot.ToShortDateString() + "' order by date desc";

        DataSet dset = new DataSet();
        SqlDataAdapter adapter = new SqlDataAdapter(query, connection);

        SqlCommandBuilder cb = new SqlCommandBuilder(adapter);

        adapter.Fill(dset, "my_Table");

        dataGridView1.DataSource = dset;
        dataGridView1.DataMember = "my_table";

        adapter.Update(dset, "my_Table");

        closeConnection();
    }
4

3 に答える 3

1

SQL の日時型の日付範囲は、1753 年 1 月 1 日から 9999 年 12 月 31 日までです。

そして、.NET 日時の最小値は、0001 年 1 月 1 日 00:00:00.0000000 です。

範囲内に収まっていないことを確認することをお勧めします。

つまり、日時ピッカーが SQL 最小値で開始されていない場合、無効な SQL 日付が返される可能性があります。

于 2012-09-19T11:11:04.867 に答える
0

同様の問題に直面しましたが、私の修正は簡単でした:

それ以外の

+ datumVan.ToShortDateString() + "' and '" + datumTot.ToShortDateString() +

に変更しました

+ datumTot.ToShortDateString() + "' and '" + datumVan.ToShortDateString() +   

これが役立つ場合は、試してみてください。

また、あなたの日付は ToShortDateString() を使用して文字列に変換されていますが、テーブル内の日付の形式は何ですか??

次のクエリも試すことができます。

select * from my_Table where CAST(date AS DATE) between CAST('" + ToShortDateString() + "' AS DATE) and CAST('" + datumTot.ToShortDateString() + "' AS DATE) order by date desc";

于 2012-09-19T13:03:07.003 に答える
0

日付を文字列として扱わないでください。それはそれと同じくらい簡単です。そもそもそれらを文字列に変換することを避けてください。

したがって、代わりに:

string query = "select * from my_Table where date between '" + datumVan.ToShortDateString() + "' and '" + datumTot.ToShortDateString() + "' order by date desc";

代わりに:

string query = "select * from my_Table where date between @Van and @Tot order by date desc";

次に、コマンド オブジェクトにパラメーターを追加します。

adapter.SelectCommand.Parameters.AddWithValue("@Van",datumVan);
adapter.SelectCommand.Parameters.AddWithValue("@Tot",datumTot);

.NET の datetime 値を SQL Server の datetime 値に変換する問題は、ADO.Net と SQL Server に任せてください。

于 2012-09-19T13:40:28.273 に答える