c# - C# SqlDataAdapter 必须声明标量变量 Sql Exception
问题描述
刚接触 C# 并使用 Windows 窗体应用程序。我正在尝试对 SQL 数据库执行更新查询,但一直遇到“必须声明标量变量”错误,我不明白为什么。
以下代码成功打开连接。我的更新声明是有效的。浏览了很多关于这个主题的帖子,我只是没有看到我的错误......任何帮助将不胜感激。
public void SetJobStatus(long JobId)
{
string strSql = "update Jobmaster set jobstatus = 5 where equid = @stationId AND ID <> @jobId AND OfflineEntry = 0;";
using (SqlConnection conn = new SqlConnection())
{
conn.ConnectionString = GlobalVars.connString;
conn.Open();
// use the connection here, and check to confirm it is open
if (conn.State != ConnectionState.Open)
{
if (conn != null)
{
conn.Close();
}
conn.Open();
}
SqlCommand command;
SqlDataAdapter adapter = new SqlDataAdapter();
command = new SqlCommand(strSql, conn);
//below AddWithValue gives error:
//System.Data.SqlClient.SqlException: 'Must declare the scalar variable "@stationId".'
//command.Parameters.AddWithValue("@stationId", 1);
//command.Parameters.AddWithValue("@jobId", JobId);
//next I tried this, and the same error:
//System.Data.SqlClient.SqlException: 'Must declare the scalar variable "@stationId".'
command.Parameters.Add("@stationId", SqlDbType.Int);
command.Parameters["@stationId"].Value = 1;
command.Parameters.Add("@jobId", SqlDbType.Int);
command.Parameters["@jobId"].Value = JobId;
adapter.UpdateCommand = new SqlCommand(strSql, conn);
adapter.UpdateCommand.ExecuteNonQuery();
}
}
解决方案
我已经检查了您的代码,需要进行一些更改。请尝试运行以下代码:
public void SetJobStatus(int JobId)
{
string strSql = "update Jobmaster set jobstatus = 5 where equid = @stationId AND ID <> @jobId AND OfflineEntry = 0;";
using (SqlConnection conn = new SqlConnection())
{
try
{
conn.ConnectionString = GlobalVars.connString;
conn.Open();
SqlCommand command = new SqlCommand(strSql, conn);
command.CommandType = CommandType.Text;
command.Parameters.Add("@stationId", SqlDbType.Int);
command.Parameters["@stationId"].Value = 1;
command.Parameters.Add("@jobId", SqlDbType.Int);
command.Parameters["@jobId"].Value = JobId;
command.ExecuteNonQuery();
}
catch (Exception ex)
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
}
}
提示:
- 任务完成后或出现错误时始终关闭连接。
推荐阅读
- django - 使用字符串字段 (CharField) 通过外键关联模型
- angular - 如何编写保护以防止用户在 Angular 6 中丢失表单数据?
- ios - 故事板转场目的地不是预期课程
- git - 如何让新的樱桃采摘分支被推上审查?
- c - 如何修复“未分配重新分配的指针”错误
- javascript - 如何使 Ember 计算属性依赖于变量的所有后代属性?
- css - 如何在响应式类中正确格式化 href?
- reactjs - 在安装了 react-redux 和 redux 模块的连接的反应路由器中无法解析模块“react-redux”
- python-sphinx - sphinx autodoc 在 readthedocs 上创建空白页面,但在本地正确包含模块文档字符串
- python - 搜索字符串中两个分隔符之间的字符