[ad_1]
System.Data.SqlClient.SqlException: ‘nvarchar データ型を datetime データ型に変換すると、範囲外の値になりました。
ステートメントは終了されました。’
私が試したこと:
private void SaveImportDataToDatabase(DataTable S2P5) { using (SqlConnection conn = new SqlConnection(@"Data Source=BBKUL035\SQLEXPRESS; Initial Catalog=HoDB; User Id=sa; Password=1234")) { conn.Open(); foreach (DataRow importRow in S2P5.Rows) { SqlCommand cmd = new SqlCommand ("INSERT INTO S2P5 (DateTime,Miliseconds,MachineAutoStartStop,Pressure,Batch,UPCurrent,LPCurrent,LinearSensor,Load,SlidePosition,Step1,Step2,Step3,Step4,Step5,Step6,Step7,Step8,Step9,Step10,UPPlatePosition,LPPlatePosition,SunGearPosition,InternalGearPosition)" + "VALUES (@DateTime,@Miliseconds,@MachineAutoStartStop,@Pressure,@Batch,@UpCurrent,@LpCurrent,@LinearSensor,@Load,@SlidePosition,@Step1,@Step2,@Step3,@Step4,@Step5,@Step6,@Step7,@Step8,@Step9,@Step10,@UPPlatePosition,@LPPlatePosition,@SunGearPosition,@InternalGearPosition)", conn); cmd.Parameters.AddWithValue("@DateTime", importRow["DateTime"]); cmd.Parameters.AddWithValue("@Miliseconds", importRow["Miliseconds"]); cmd.Parameters.AddWithValue("@MachineAutoStartStop", importRow["MachineAutoStartStop"]); cmd.Parameters.AddWithValue("@Pressure", importRow["Pressure"]); cmd.Parameters.AddWithValue("@Batch", importRow["Batch"]); cmd.Parameters.AddWithValue("@UPCurrent", importRow["UPCurrent"]); cmd.Parameters.AddWithValue("@LPCurrent", importRow["LPCurrent"]); cmd.Parameters.AddWithValue("@LinearSensor", importRow["LinearSensor"]); cmd.Parameters.AddWithValue("@Load", importRow["Load"]); cmd.Parameters.AddWithValue("@SlidePosition", importRow["SlidePosition"]); cmd.Parameters.AddWithValue("@Step1", importRow["Step1"]); cmd.Parameters.AddWithValue("@Step2", importRow["Step2"]); cmd.Parameters.AddWithValue("@Step3", importRow["Step3"]); cmd.Parameters.AddWithValue("@Step4", importRow["Step4"]); cmd.Parameters.AddWithValue("@Step5", importRow["Step5"]); cmd.Parameters.AddWithValue("@Step6", importRow["Step6"]); cmd.Parameters.AddWithValue("@Step7", importRow["Step7"]); cmd.Parameters.AddWithValue("@Step8", importRow["Step8"]); cmd.Parameters.AddWithValue("@Step9", importRow["Step9"]); cmd.Parameters.AddWithValue("@Step10", importRow["Step10"]); cmd.Parameters.AddWithValue("@UPPlatePosition", importRow["UPPlatePosition"]); cmd.Parameters.AddWithValue("@LPPlatePosition", importRow["LPPlatePosition"]); cmd.Parameters.AddWithValue("@SunGearPosition", importRow["SunGearPosition"]); cmd.Parameters.AddWithValue("@InternalGearPosition", importRow["InternalGearPosition"]); cmd.ExecuteNonQuery(); } }
解決策 1
System.Data.SqlClient.SqlException: 'The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.
うん。 nvarchar
Sql 英数字フィールド (別名 string
)そしてあなたはプッシュしようとしています DateTime
それに。
Sql フィールドは DateTime
分野。 変換したい場合 DateTime
に string
コードでそれを行う必要があります。 これは最適な解決策ではありません。 Sqlフィールドをに変更する必要があります DataTime
分野。 これは次のように重要です。 string
とは異なる方法で処理されます DateTime
、特に並べ替えとフィルタリングに関しては。
解決策 2
問題は、AddWithValue がどのように機能するかを理解していないことです。
これらの呼び出しには、パラメーターの名前と値の 2 つを指定しています。 では、AddWithValue はどのようにしてデータをフォーマットして SQL に渡すことができるのでしょうか? データ自体は調べませんが、データの型、string、int、DateTime などを調べます。
AddWithValue へのすべての呼び出しに文字列しか渡さないため、コードが生成するすべてのパラメーターは、SQL への文字列として、または SQL が NVARCHAR 型を呼び出すものとして扱われます。 これを修正するには、渡すデータを適切な型に変換してから、AddWithValue に渡す必要があります。
C#
cmd.Parameters.AddWithValue("@DateTime", importRow["DateTime"]); becomes // I'm assuming your data can even be cast to a DateTime type cmd.Parameters.AddWithValue("@DateTime", (DateTime)importRow["DateTime"]);
[ad_2]
コメント