[英]C# string was not recognized as a valid DateTime in Parameters.AddWithValue
我正在C#.net上工作,我想插入12個塊的日期時間。 波紋管是我的代碼
cmd2.Parameters.AddWithValue("@Occurrence_Time", Convert.ToDateTime(Meter_data.Substring(161, 12)));
cmd2.Parameters.AddWithValue("@Recovery_Time", Convert.ToDateTime(Meter_data.Substring(173, 12)));
在運行程序時,出現以下錯誤
string was not recognized as a valid DateTime
使用快速監視 ,日期時間應類似於161025120830
,而在插入日期時,日期時間應類似於2016-10-25 12:08:30
在上面的行中,日期以16
開頭,但是在數據庫中應將其插入為2016
更新的代碼
正如建議un-lucky
,我已經做出了如下代碼更改,請參閱波紋管
try
{
con.Open();
cmd1.Parameters.AddWithValue("@Device_ID", device_Id);
cmd1.Parameters.AddWithValue("@Energy_kWh", Convert.ToDecimal(Meter_data.Substring(18, 9)));
cmd1.Parameters.AddWithValue("@Power_kW", Convert.ToDecimal(Meter_data.Substring(144, 7)));
cmd1.Parameters.AddWithValue("@Voltage_Phase_1", Convert.ToDecimal(Meter_data.Substring(102, 6)));
cmd1.Parameters.AddWithValue("@Voltage_Phase_2", Convert.ToDecimal(Meter_data.Substring(109, 6)));
cmd1.Parameters.AddWithValue("@Voltage_Phase_3", Convert.ToDecimal(Meter_data.Substring(116, 6)));
cmd1.Parameters.AddWithValue("@Current_Phase_1", Convert.ToDecimal(Meter_data.Substring(123, 6)));
cmd1.Parameters.AddWithValue("@Current_Phase_2", Convert.ToDecimal(Meter_data.Substring(130, 6)));
cmd1.Parameters.AddWithValue("@Current_Phase_3", Convert.ToDecimal(Meter_data.Substring(137, 6)));
cmd1.Parameters.AddWithValue("@Device_Serial_Number", Meter_data.Substring(152, 8));
//For Events
string formatString = "yyMMddHHmmss";
DateTime Occurrence_Time, Recovery_Time;
string strOccurrence = Meter_data.Substring(161, 12);
string strRecovery = Meter_data.Substring(173, 12);
cmd2.Parameters.AddWithValue("@Device_ID", device_Id);
cmd2.Parameters.AddWithValue("@Event_ID", event_Id);
if (DateTime.TryParseExact(strOccurrence, formatString, CultureInfo.InvariantCulture, DateTimeStyles.None, out Occurrence_Time))
{
if (DateTime.TryParseExact(strRecovery, formatString, CultureInfo.InvariantCulture, DateTimeStyles.None, out Recovery_Time))
{
cmd2.Parameters.Add("@Occurrence_Time", SqlDbType.DateTime).Value = Occurrence_Time;
cmd2.Parameters.Add("@Recovery_Time", SqlDbType.DateTime).Value = Recovery_Time;
}
}
//cmd2.Parameters.AddWithValue("@Occurrence_Time", Convert.ToDateTime(Meter_data.Substring(161, 12)));
//cmd2.Parameters.AddWithValue("@Recovery_Time", Convert.ToDateTime(Meter_data.Substring(173, 12)));
int ADS_Device_Data_rows_executed = cmd1.ExecuteNonQuery();
Console.WriteLine("Rows Executed: '{0}'", ADS_Device_Data_rows_executed);
int Device_Events_rows_executed = cmd2.ExecuteNonQuery();
Console.WriteLine("Rows Executed: '{0}'", Device_Events_rows_executed);
con.Close();
Console.WriteLine("Data Recieved correctly and Stored in Data Base : {0}", DateTime.Now);
}
catch (Exception ex)
{
Console.WriteLine(" >> " + ex.ToString());
Console.WriteLine("Data Recieved is Incorrect Data is not stored in DB : {0}", DateTime.Now);
}
在調試指針何時到達if (DateTime.TryParseExact(strOccurrence, formatString, CultureInfo.InvariantCulture, DateTimeStyles.None, out Occurrence_Time))
它沒有進入並給出異常Must declare the scalar variable "@Occurrence_Time".
此外,可能有多個“ 發生時間”和“ 恢復時間” ,但現在僅是一個事件時間
我搜索了許多有關此異常的文章,但找不到用於Parameters.AddWithValue
任何准確解決方案
更新了代碼2
根據建議,我在代碼中做了以下更改
string formatString = "yyyyMMddHHmmss";
DateTime Occurrence_Time ,Recovery_Time;
string strOccurrence = "20" + Meter_data.Substring(161, 12);
string strRecovery = "20" + Meter_data.Substring(173, 12);
if (DateTime.TryParseExact(strOccurrence, formatString, CultureInfo.InvariantCulture, DateTimeStyles.None, out Occurrence_Time))
{
if (DateTime.TryParseExact(strRecovery, formatString, CultureInfo.InvariantCulture, DateTimeStyles.None, out Recovery_Time))
{
cmd2.Parameters.Add("@Occurrence_Time", SqlDbType.DateTime).Value = Occurrence_Time;
cmd2.Parameters.Add("@Recovery_Time", SqlDbType.DateTime).Value = Recovery_Time;
}
}
第一次運行時,我能夠查看正確的數據並將其成功插入,但是現在它顯示為空,請參見下面的圖片
現在我又遇到了同樣的異常
Must declare the scalar variable "@Occurrence_Time".
任何幫助將不勝感激
問題出在您的日期/時間解析,而不是插入。 因此,您只需要提供日期時間格式,如下所示:
string formatString = "yyMMddHHmmss";
DateTime dt;
if (DateTime.TryParseExact(text, formatString, CultureInfo.InvariantCulture,
DateTimeStyles.None,
out dt))
所以convert函數的輸入是161025120830
,我們可以說這將是yyMMddHHmmss
格式。因此,執行此轉換的最佳選擇是DateTime.TryParseExact
,將其轉換並存儲在變量中,然后將其用於插入。 代碼將如下所示:
string formatString= "yyMMddHHmmss";
DateTime Occurrence_Time,Recovery_Time;
string strOccurrence = Meter_data.Substring(161, 12);
string strRecovery = Meter_data.Substring(173, 12);
if (DateTime.TryParseExact(strOccurrence,formatString, CultureInfo.InvariantCulture,DateTimeStyles.None,out Occurrence_Time))
{
if (DateTime.TryParseExact(strRecovery,formatString, CultureInfo.InvariantCulture,DateTimeStyles.None,out Recovery_Time))
{
cmd2.Parameters.Add("@Occurrence_Time",SqlDbType.DateTime).Value=Occurrence_Time;
cmd2.Parameters.Add("@Recovery_Time",SqlDbType.DateTime).Value=Recovery_Time;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.