[英]C# SqlDataAdapter Must declare the scalar variable 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", SqlDbType.Int, (int)JobId);
adapter.UpdateCommand = command;
adapter.UpdateCommand.ExecuteNonQuery();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.