错误-必须声明标量变量-C#

错误-必须声明标量变量-C#,c#,mysql,asp.net,variables,scalar,C#,Mysql,Asp.net,Variables,Scalar,我正在使用C#将文件上传到文件夹中。点击上传后出现错误,错误为“必须声明标量变量”@TABLE_ID”。我做了一些研究,尝试使用其他示例,但仍然出现错误。这是上传的函数: protected void UploadFile(object sender, EventArgs e) { string str = ConfigurationManager.ConnectionStrings["Ulysses"].ConnectionString; string

我正在使用C#将文件上传到文件夹中。点击上传后出现错误,错误为“必须声明标量变量”@TABLE_ID”。我做了一些研究,尝试使用其他示例,但仍然出现错误。这是上传的函数:

protected void UploadFile(object sender, EventArgs e)
    {
        string str = ConfigurationManager.ConnectionStrings["Ulysses"].ConnectionString;
        string filenam = FileUpload1.FileName.ToString();
        string TABLE_NAME = "REQUEST";

        int table_id = -1;
        table_id = generateNextId("SP_LINK_TABLE_FIELD_ID");

        string path = @"C:\Users\muhd\Documents\CyberLink";

        path = path + filenam;
        FileUpload1.PostedFile.SaveAs(path);

       SqlConnection con = new SqlConnection(str);
       SqlCommand cmd = new SqlCommand();
       cmd.CommandText = "Insert into OLE(LINK_TABLE_ID, LINK_TABLE_NAME, OLE_LINK_FILE_NAME) values(@TABLE_ID,@TABLE_NAME,@FILE_NAME)";
       cmd.CommandType =  CommandType.Text;
       command.Parameters.AddWithValue("@TABLE_ID", SqlDbType.Int).Value = table_id;
       command.Parameters.AddWithValue("@TABLE_NAME", TABLE_NAME);
       command.Parameters.AddWithValue("@FILE_NAME",path);
       cmd.Connection = con;
       con.Open();
       cmd.ExecuteNonQuery();
       con.Close();
    }
表_id是使用另一个函数从存储过程中获取的。请参阅以下内容:

protected int generateNextId(string strStoredProcedureName)//this is for inserting table_field_id for uploading attachment
    {
        int intNewId = 0;
        try
        {
            strConn = ConfigurationManager.ConnectionStrings["Ulysses"].ToString();
            conn = new SqlConnection(strConn);
            command = new SqlCommand(strStoredProcedureName, conn);
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.Add("@newid", SqlDbType.Int);
            command.Parameters["@newid"].Direction = ParameterDirection.ReturnValue;
            conn.Open();
            command.ExecuteNonQuery();
            intNewId = (int)command.Parameters["@newid"].Value;
        }
        catch (Exception ex)
        {

        }
        finally
        {
            conn.Close();
            conn = null;
        }
        return intNewId;
    }
   }
这是我使用的存储过程:

    SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SP_LINK_TABLE_FIELD_ID]
AS
begin tran;
declare @nextid integer;
update generator set current_number = current_number + 1 where generator = 'LINK_TABLE_FIELD';
select @nextid = current_number from generator where generator = 'LINK_TABLE_FIELD';
commit tran;
return @nextid;

我不知道为什么需要声明,即使是其他具有相同样式的函数,代码也没有问题,但这一个显示了此错误。我希望任何人都能对此问题提供一些见解。感谢高级。

您正在执行的命令是
cmd
,而不是
命令
。您没有将参数添加到correct命令对象

command.Parameters.AddWithValue("@TABLE_ID", SqlDbType.Int).Value = table_id;
command.Parameters.AddWithValue("@TABLE_NAME", TABLE_NAME);
command.Parameters.AddWithValue("@FILE_NAME",path);
应该是:

cmd.Parameters.AddWithValue("@TABLE_ID", SqlDbType.Int).Value = table_id;
cmd.Parameters.AddWithValue("@TABLE_NAME", TABLE_NAME);
cmd.Parameters.AddWithValue("@FILE_NAME",path);

您正在执行的命令是
cmd
,而不是
command
。您没有将参数添加到正确的命令对象中

command.Parameters.AddWithValue("@TABLE_ID", SqlDbType.Int).Value = table_id;
command.Parameters.AddWithValue("@TABLE_NAME", TABLE_NAME);
command.Parameters.AddWithValue("@FILE_NAME",path);
应该是:

cmd.Parameters.AddWithValue("@TABLE_ID", SqlDbType.Int).Value = table_id;
cmd.Parameters.AddWithValue("@TABLE_NAME", TABLE_NAME);
cmd.Parameters.AddWithValue("@FILE_NAME",path);

发布存储过程您正在将查询设置为变量
cmd
,但随后要将参数分配给变量
命令
。有些参数不匹配。@Sachu抱歉,忘记了。已发布存储过程。请尝试更改命令。参数。AddWithValue(@TABLE\u ID),SqlDbType.Int).Value=table_id;to-ommand.Parameters.AddWithValue(“@table_id”,table_id);这不是
mysql
,而是SQL Server。请使用适当的方法生成唯一ID。您的代码不适合竞争条件。相反,请使用
UPDATE…OUTPUT
子句。发布存储过程您正在将查询设置为变量
cmd
,但随后要将参数分配给变量
comm和
。有些不匹配。@Sachu抱歉忘记了。已经发布了存储过程。请尝试更改命令。参数。AddWithValue(“@TABLE\u ID”,SqlDbType.Int)。值=TABLE\u ID;到-ommand.Parameters.AddWithValue(“@TABLE\u ID”,TABLE\u ID);这不是
mysql
,而是SQL Server。请使用适当的方法生成唯一ID。您的代码对竞争条件不安全。相反,请使用
UPDATE…OUTPUT
子句。@Deniswesses他可能正在向另一个全局对象添加参数。这样,SQL将
@TABLE_ID
视为标量查询变量找不到。
SqlCommand
没有将其替换为值。在他的情况下,这是一个变量名问题。是的,我不知道cmd和命令不匹配。感谢您看到我哪里做错了。@DenisWessels他可能正在将参数添加到另一个全局对象。这样,SQL将
@TABLE_ID
视为sc找不到alar查询变量。
SqlCommand
不会将其替换为当时的值。在他的情况下,这是一个变量名问题。是的,我不知道cmd和命令不匹配。感谢您看到我哪里做错了。