微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#SqlDataAdapter必须声明标量变量Sql Exception

如何解决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();
            }
        }
    }
}

提示:

  • 在任务完成后或出现错误时始终关闭连接。
,

感谢在这里发消息的每个人。 WSC的评论确实改变了技巧adapter.UpdateCommand = command;。在进行WSC更改后,我尝试了三种添加参数的方法-其中两种有效,一种没有。

我的修订代码如下。我在代码中列出了所有三种变体,希望这对其他人有帮助。

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);
        
        //works
        command.Parameters.AddWithValue("@stationId",GlobalVars.stationId);
        command.Parameters.AddWithValue("@jobId",JobId);

        //works
        //command.Parameters.Add("@stationId",SqlDbType.Int);
        //command.Parameters["@stationId"].Value = 5;
        //command.Parameters.Add("@jobId",SqlDbType.Int);
        //command.Parameters["@jobId"].Value = JobId;

        //throws error at adapter.UpdateCommand.ExecuteNonQuery line:
        //'The parameterized query '(@stationId int,@jobId int)update Jobmaster set jobstatus = 5 wh' expects the parameter '@stationId',which was not supplied.'
        //command.Parameters.Add("@stationId",SqlDbType.Int,5);
        //command.Parameters.Add("@jobId",(int)JobId);

        adapter.UpdateCommand = command;
        adapter.UpdateCommand.ExecuteNonQuery();
    }

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?