我已经在这几个小时了,不能休息一下.我正在用C#编写这个程序,它连接到数据库并在每次有新的传感器读数时写入新的行.将新行写入DB的Function片段如下所示.
当我运行我的代码时,我继续得到以下运行时错误:
System.Data.SqlClient.SqlException(0x80131904):必须声明标量变量"@dbSpeed".
当我从使用常规旧数组切换到Dictionary时,我开始遇到这个问题,但我不确定是什么原因.
private void WriteDataRowtoSQL(Dictionary<string, double> dataPoints)
{
//SQL Database Connection String.
string dataSource = @"Data Source=TSCRPC\TSCRPCDB;Initial Catalog=TSCRPCDB;Integrated Security=True";
//SQL Database Query Command Build to insert sensor data as rows.
string sensorDataRowItems = "(Date,Time,Mac_State,S_GainStatus,S_Speed,S_Direction,S_Temperature,S_Humidity,S_PowerOutput,S_Current,S_Voltage,S_EngineRPM,S_NoiseLevel,S_BatteryVolts,S_TorkStrain1,S_TorkStrain2,S_WheelStrain,S_Vibration1,S_Vibration2,S_BreakPressure)";
string cmdString = "INSERT INTO SensorData " + sensorDataRowItems + " VALUES (@dbDate, @dbTime, @dbMacState, @dbGainStatus, @dbSpeed, @dbDirection, @dbTemperature, @dbHumidity, @dbPowerOutput, @dbCurrent, @dbVoltage, @dbEngineRPM, @dbNoiseLevel, @dbBatteryVolts, @dbTorkStrain1, @dbTorkStrain2, @dbWheelStrain, @dbVibration1, @dbVibration2, @dbBreakPressure)";
//Connect to and use SQL DB.
using (SqlConnection sqlConn = new SqlConnection(dataSource))
{
using (SqlCommand comm = new SqlCommand())
{
comm.Connection = sqlConn;
comm.CommandText = cmdString;
if (dataPoints.ContainsKey("Gain Status") == true)
{
comm.Parameters.AddWithValue("@dbGainStatus", true);
}
else if (dataPoints.ContainsKey("Battery Voltage") == true)
{
comm.Parameters.AddWithValue("@dbBatteryVolts", dataPoints["Battery Voltage"]);
}
else if (dataPoints.ContainsKey("Break Line Pressure") == true)
{
comm.Parameters.AddWithValue("@dbBreakPressure", dataPoints["Break Line Pressure"]);
}
else if (dataPoints.ContainsKey("Volts") == true)
{
comm.Parameters.AddWithValue("@dbVoltage", dataPoints["Volts"]);
}
else if (dataPoints.ContainsKey("Current") == true)
{
comm.Parameters.AddWithValue("@dbCurrent", dataPoints["Current"]);
}
else if (dataPoints.ContainsKey("Vibration") == true)
{
comm.Parameters.AddWithValue("@dbVibration1", dataPoints["Vibration"]);
}
else if (dataPoints.ContainsKey("Tork Strain 1") == true)
{
comm.Parameters.AddWithValue("@dbTorkStrain1", dataPoints["Tork Strain 1"]);
}
else if (dataPoints.ContainsKey("Tork Strain 2") == true)
{
comm.Parameters.AddWithValue("@dbTorkStrain2", dataPoints["Tork Strain 2"]);
}
else if (dataPoints.ContainsKey("Speed") == true)
{
comm.Parameters.AddWithValue("@dbSpeed", dataPoints["Speed"]);
}
else if (dataPoints.ContainsKey("Engine RPM") == true)
{
comm.Parameters.AddWithValue("@dbEngineRPM", dataPoints["Engine RPM"]);
}
comm.Parameters.AddWithValue("@dbDate", DateTime.Now.ToString("M/d/yyyy"));
comm.Parameters.AddWithValue("@dbTime", DateTime.Now.ToString("H:m:s:fff"));
comm.Parameters.AddWithValue("@dbMacState", true);
comm.Parameters.AddWithValue("@dbDirection", 22);
comm.Parameters.AddWithValue("@dbTemperature", 22);
comm.Parameters.AddWithValue("@dbHumidity", 22);
comm.Parameters.AddWithValue("@dbPowerOutput", 22);
comm.Parameters.AddWithValue("@dbNoiseLevel", 22);
comm.Parameters.AddWithValue("@dbVibration2", 22);
comm.Parameters.AddWithValue("@dbWheelStrain", 22);
try
{
sqlConn.Open();
comm.ExecuteNonQuery();
}
catch(SqlException e)
{
Console.WriteLine(e.ToString());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您需要在查询中添加所有参数,即使它们没有值.更改
if (dataPoints.ContainsKey("Gain Status") == true)
{
comm.Parameters.AddWithValue("@dbGainStatus", true);
}
Run Code Online (Sandbox Code Playgroud)
喜欢的东西
comm.Parameters.AddWithValue("@dbGainStatus",
dataPoints.ContainsKey("Gain Status") ? (object)true : DBNull.Value);
Run Code Online (Sandbox Code Playgroud)
依此类推每个参数(更改true为您打算使用的值)
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |