2

という名前のテーブルを持つデータベースがあり、そのテーブルにはsmalldatetime 型Fio_FinalSchedの名前の列があります。次の方法で日付文字列を型FinalDateに変換します。DateTime

DateTime theDate = Convert.ToDateTime("2010-01-05 23:50:00");

次に、次の方法でコマンド文字列を作成します。

string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values ("+theDate+")";

次に、それを SQL コマンドに変換します。

SqlCommand myCommand = new SqlCommand(testCommand,conn);

connデータベース接続はどこにありますか。最後に、次のコマンドを実行します。

myCommand.ExecuteNonQuery();

これを実行すると、実行行に到達し、エラーが表示されます。

Incorrect syntax near '11'.

日付文字列の形式をいくつかの方法で変更しようとしましたが、役に立ちませんでした。私のデータベースがsmalldatetimeタイプではなくタイプを望んでいるためdatetimeですか? smalldatetimeC# には、使用できる型がないようです。どんな洞察もいただければ幸いです!

4

6 に答える 6

7

一重引用符を使用して、SQL文字列リテラルで日付をラップする必要があります...

string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values ('"+theDate+"')";

またはパラメータを使用してください..

string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values (@myDate)";
cmd.Parameters.Add(new SqlParameter("@myDate", theDate));
于 2011-07-12T21:09:05.707 に答える
3

文字列の日付を一重引用符で囲んでみてください...

string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values ('"+theDate+"')";
于 2011-07-12T21:09:16.790 に答える
2

DateTime 型と DataBase の他のいくつかを扱うには、 @Parametersを使用することを強くお勧めします。また、必要に応じて、タイムゾーン、フォーマット、またはクライアント側で行うすべての変換を使用することを強くお勧めします。

また、投稿で説明したように、列はsmalldatetimeタイプであり、文字列ではないためです。

要するに、 @Parametersを使用してみてください。おそらく成功するでしょう。

よろしく。

于 2011-07-12T21:10:46.680 に答える
1

名前付きパラメーターを使用することをお勧めします。

string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values (@MYDATE)";
SqlCommand myCommand = new SqlCommand(testCommand,conn);
myCommand.Parameters.Add(new SqlParameter("@MYDATE", SqlDbType.DateTime)).Value = theDate;
myCommand.ExecuteNonQuery();
于 2011-07-12T21:14:09.580 に答える
1

SqlParameterCollection.AddWithValueメソッドなど、 string の代わりにパラメーターを使用します。

于 2011-07-12T21:09:05.737 に答える
1

日付を一重引用符で囲むことから始めます。

例えば

('"+theDate+"')";

通常、ISO ではこれで十分です。コンバーター関数を調べる必要があるかもしれません。

theDate の情報がどこから来るかに注意してください。編集可能なフィールド (など) からのものである場合、これは SQL インジェクション攻撃の候補です。

しかし、dateTime に変換してから SQL 文字列に貼り付ける場合、それはエンコーディングの層ではないでしょうか。

于 2011-07-12T21:10:56.780 に答える