首页 > 解决方案 > 必须声明标量变量“@soNum”。一种方法有效,另一种无效

问题描述

这个有效:

private void LogOpen()
{
    SqlCommand sqlCommand = new SqlCommand();
    sqlCommand.Parameters.AddWithValue("@Name", userPrincipal.Name);
    sqlCommand.Parameters.AddWithValue("@Opened", DateTime.Now);

    string sqlString = "INSERT INTO [Automation].[dbo].[WDAutomationUsage] ([Name], [Opened]) " +
                       "OUTPUT INSERTED.ID " +
                       "VALUES (@Name, @Opened)";

    sqlCommand.CommandText = sqlString;

    if (diagramBuilder.sqlConn.State != System.Data.ConnectionState.Open)
    {
        diagramBuilder.sqlConn.Open();
    }

    sqlCommand.Connection = diagramBuilder.sqlConn;
    usageID = Convert.ToInt32(sqlCommand.ExecuteScalar());
}

这个没有:

private void LogSONumber(string soNum)
{
        SqlCommand sqlCommand = new SqlCommand();
        sqlCommand.Parameters.AddWithValue("@UsageID", usageID);
        //sqlCommand.Parameters.AddWithValue("@SONumber", soNum);
        SqlParameter sqlParameter = new SqlParameter("@SONumber", System.Data.SqlDbType.NVarChar, 50);
        sqlParameter.Value = soNum;
        sqlCommand.Parameters.Add(sqlParameter);

        string sqlString = "INSERT INTO [Automation].[dbo].[WDAutomationSONums] ([UsageID], [SONumber]) " +
                           "OUTPUT INSERTED.ID " +
                           "VALUES (@usageID, @soNum)";

        sqlCommand.CommandText = sqlString;

        if (diagramBuilder.sqlConn.State != System.Data.ConnectionState.Open)
        {
            diagramBuilder.sqlConn.Open();
        }

        sqlCommand.Connection = diagramBuilder.sqlConn;
        usageSOID = Convert.ToInt32(sqlCommand.ExecuteScalar());
    }

在第二个中,我收到此错误:

必须声明标量变量“@soNum”

正如你所看到的,我尝试了两种不同的方法来声明 soNum,但我仍然得到同样的错误。请帮忙,这让我发疯了。

标签: c#sql-server

解决方案


您只是在您的变量标识符中使用不同的变量标识符,INSERT而不是作为SqlParameter.

更改VALUES (@usageID, @soNum)VALUES (@usageID, @SONumber)


推荐阅读