2

私はこのようなコードを持っています:

Dim starttime As TimeSpan = fromtimepicker.Value.TimeOfDay
Dim endtime As TimeSpan = TotimePicker.Value.TimeOfDay

そして、私は次のようにテーブルを更新しようとします:

Dim sqlcmd As String = "update Location_tbl set StartTime='" & starttime & "' ,EndTime='" & endtime & "'  

しかし、エラーは次のようになります:

operator & is not defined for types 'string' and system.timespan

この問題を解決するにはどうすればよいですか

4

3 に答える 3

0

まず、パラメーター化されたクエリを使用する必要があります。これは、SQL ステートメントを読みやすくし、すべての値を文字列に変換する必要がないため、良い方法です。また、文字列入力に対するSQL インジェクション攻撃の可能性を回避するのにも役立ちます。

次に、ソリューションを見つける方法は、データベース内のこれらの列のデータ型によって異なります。それらが DateTime または Time の場合、値をそのまま使用できる可能性があります。

Dim sql As String = "update Location_tbl set StartTime= @starttime, EndTime= @endtime"

Using cn As New SqlConnection("Your connection string here"), _
    cmd As New SqlCommand(sql, cn)

    cmd.Parameters.Add("@starttime", SqlDbTypes.DateTime).Value = fromtimepicker.Value.TimeOfDay
    cmd.Parameters.Add("@endtime", SqlDbTypes.DateTime).Value = TotimePicker.Value.TimeOfDay
    Return cmd.ExecuteScalar()
End Using

それらが文字列型の場合は、データ型を次のように変更し、最後にSqlDbTypes.VarChar値を渡します.ToString

サイドノート; SQLステートメントの最後に句がないと思いますWHERE(このテーブルに1行しかない場合を除きますか?)

于 2013-07-16T10:50:18.727 に答える
0

使用する

 starttime.ToString(...)

... はフォーマット文字列 ( http://msdn.microsoft.com/en-us/library/ee372287.aspx ) です。使用しているデータベースによって異なります。データベース関数を使用して変換する必要がある場合があります。

于 2013-07-16T10:35:39.727 に答える
0

このエラーはデータベースとは関係ありません。TimeSpan変数と変数を結合しようとしていstringます。ToStringまたはを使用して、タイムスパンを文字列として表現する方法を .NET に指示する必要がありますString.Format

SQL ステートメントを文字列として取得したら、ステートメントを実行できます。

文字列をステートメントに連結する代わりに、パラメーターの使用を検討することをお勧めします。

于 2013-07-16T10:36:10.793 に答える